OC block 內(nèi)存泄漏探究

可能大家都知道如果在block中顯式或隱式地引用了self(比如引用了self的成員變量等),則會引發(fā)內(nèi)存泄漏志珍,但又會有人說,如果是類似于NSArray或者Animation的系統(tǒng)block中引用了self不會有問題控漠,這些經(jīng)驗應(yīng)當都會有一些事實的佐證,但這里面真正的機制是怎樣呢客蹋?

先了解下cocoa的block本身,在block的誕生之初怔球,由于編譯器還沒有很智能,所以程序員在使用的時候有些情況下還需要關(guān)注block從棧上復制到堆上的時機浮还,即手動調(diào)用Block_copy(比如并沒有引用作用域中的自動變量等情況)竟坛。

按照Working with Blocks給出的例子,在使用block時引起強引用循環(huán)時會導致嚴重的內(nèi)存泄漏钧舌,而大家要注意的是担汤,循環(huán)強引用的條件是block中引用了強引用的self,而另一必要條件是self也同時引用了block洼冻。

而實際的經(jīng)驗也會告訴你一件事情崭歧,那就是,只要定義的block不被其他對象持有撞牢,并且此block在添加到各線程中之后已經(jīng)執(zhí)行完畢率碾,則其中就算是因為self強引用了創(chuàng)建它的對象,也不會導致嚴格意義上的內(nèi)存泄漏屋彪,因為在執(zhí)行完畢之后所宰,block被真正的釋放(前提條件是沒有對此block的顯式引用且此block在添加到的各線程中也已經(jīng)執(zhí)行完畢了),則其對self的強引用也已經(jīng)被釋放了畜挥,只要此時self不要自己作去強引用這個block仔粥,就不會形成循環(huán)強引用,也不會形成永久的內(nèi)存泄漏蟹但。因為在block執(zhí)行完之后躯泰,其實self只要沒有其他對象的強引用,是已經(jīng)可以釋放了的华糖,雖然可能比原本釋放的時間推后了麦向。

所以其實大家真正怕的其實并不是在block中引用了self,因為這并不會導致循環(huán)強引用客叉,而是在block中強引用self所可能導致的這個block未被釋放所引起的self未被釋放磕蛇,因為在block傳遞過程中的任何一個環(huán)節(jié)都可以導致block被強引用,所以注意規(guī)避block中的self的強引用寫法確實可以很大程度上避免內(nèi)存泄漏十办,但這種寫法本身并不一定會帶來真正的內(nèi)存泄漏秀撇。

注:按照Using Blocks的說法,block字面量是代表block的基于棧本地數(shù)據(jù)結(jié)構(gòu)的地址向族。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呵燕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子件相,更是在濱河造成了極大的恐慌再扭,老刑警劉巖氧苍,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泛范,居然都是意外死亡让虐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門罢荡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赡突,“玉大人,你說我怎么就攤上這事区赵〔宴郑” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵笼才,是天一觀的道長漱受。 經(jīng)常有香客問我,道長骡送,這世上最難降的妖魔是什么昂羡? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮摔踱,結(jié)果婚禮上紧憾,老公的妹妹穿的比我還像新娘。我一直安慰自己昌渤,他們只是感情好赴穗,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膀息,像睡著了一般般眉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潜支,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天甸赃,我揣著相機與錄音,去河邊找鬼冗酿。 笑死埠对,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的裁替。 我是一名探鬼主播项玛,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弱判!你這毒婦竟也來了襟沮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎开伏,沒想到半個月后膀跌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡固灵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年捅伤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巫玻。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡丛忆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出大审,到底是詐尸還是另有隱情蘸际,我是刑警寧澤座哩,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布徒扶,位于F島的核電站,受9級特大地震影響根穷,放射性物質(zhì)發(fā)生泄漏姜骡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一屿良、第九天 我趴在偏房一處隱蔽的房頂上張望圈澈。 院中可真熱鬧,春花似錦尘惧、人聲如沸康栈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啥么。三九已至,卻和暖如春贰逾,著一層夾襖步出監(jiān)牢的瞬間悬荣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工疙剑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氯迂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓言缤,卻偏偏與公主長得像嚼蚀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子管挟,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容