copy 和 block 的關系

在OC中行您, block代碼塊有三種不同類型糯崎。

1._NSConcreteGlobalBlock

全局的靜態(tài)block果复,不會訪問外部的變量濒翻。就是說block沒有調用其他的外部變量互例。

2._NSConcreteStackBlock

保存在棧中的 block葫辐,當函數(shù)返回時會被銷毀蹬挺。這個block就是沒有被賦值唬滑,并且block訪問了外部變量聂示。

3._NSConcreteMallocBlock

保存在堆中的 block域携,當引用計數(shù)為 0 時會被銷毀,對_NSConcreteStackBlock 執(zhí)行copy得來的鱼喉。

block 使用copy 修飾的原因:

我們知道秀鞭,函數(shù)的聲明周期是隨著函數(shù)調用的結束就終止了。我們的block是寫在函數(shù)中的扛禽。

如果是全局靜態(tài)block的話锋边,他直到程序結束的時候,才會被被釋放编曼。但是我們實際操作中基本上不會使用到不訪問外部變量的block(_NSConcreteGlobalBlock)豆巨。

如果是保存在棧中的block,他會隨著函數(shù)調用結束被銷毀掐场。從而導致我們在執(zhí)行一個包含block的函數(shù)之后往扔,就無法再訪問這個block。因為(函數(shù)結束熊户,函數(shù)棧就銷毀了萍膛,存在函數(shù)里面的block也就沒有了),我們再使用block時嚷堡,就會產(chǎn)生空指針異常(_NSConcreteStackBlock)蝗罗。

如果是堆中的block,也就是copy修飾的block。他的生命周期就是隨著對象的銷毀而結束的串塑。只要對象不銷毀沼琉,我們就可以調用的到在堆中的block(_NSConcreteMallocBlock)。

這就是為什么我們要用copy來修飾block拟赊。因為不用copy修飾的訪問外部變量的block刺桃,只在他所在的函數(shù)被調用的那一瞬間可以使用。之后就消失了吸祟。

block 什么時候被自動copy

作為變量:

一個 block 剛聲明的時候是在棧上

賦值給一個普通變量之后就會被 copy 到堆上

賦值給一個 weak 變量不會被 copy

函數(shù)傳參:

作為參數(shù)傳入函數(shù)? block不會被 copy

作為函數(shù)的返回值? block會被 copy

針對 block 做為參數(shù) 傳入函數(shù) block 不會被copy瑟慈,這些知名的開源庫是這么做的

這里寫圖片描述

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屋匕,隨后出現(xiàn)的幾起案子葛碧,更是在濱河造成了極大的恐慌,老刑警劉巖过吻,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件进泼,死亡現(xiàn)場離奇詭異,居然都是意外死亡纤虽,警方通過查閱死者的電腦和手機乳绕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逼纸,“玉大人洋措,你說我怎么就攤上這事〗芄簦” “怎么了菠发?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贺嫂。 經(jīng)常有香客問我滓鸠,道長,這世上最難降的妖魔是什么第喳? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任糜俗,我火速辦了婚禮,結果婚禮上曲饱,老公的妹妹穿的比我還像新娘吩跋。我一直安慰自己,他們只是感情好渔工,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著桥温,像睡著了一般引矩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天旺韭,我揣著相機與錄音氛谜,去河邊找鬼。 笑死区端,一個胖子當著我的面吹牛值漫,可吹牛的內容都是我干的。 我是一名探鬼主播织盼,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼杨何,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沥邻?” 一聲冷哼從身側響起危虱,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唐全,沒想到半個月后埃跷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡邮利,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年弥雹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片延届。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡剪勿,死狀恐怖,靈堂內的尸體忽然破棺而出祷愉,到底是詐尸還是另有隱情窗宦,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布二鳄,位于F島的核電站赴涵,受9級特大地震影響,放射性物質發(fā)生泄漏订讼。R本人自食惡果不足惜髓窜,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望欺殿。 院中可真熱鬧寄纵,春花似錦、人聲如沸脖苏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棍潘。三九已至恃鞋,卻和暖如春崖媚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恤浪。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工畅哑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人水由。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓荠呐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親砂客。 傳聞我的和親對象是個殘疾皇子泥张,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內容