iOS開(kāi)發(fā)-Block容易造成循環(huán)引用

一 、Block的內(nèi)存泄露體現(xiàn)
block在copy時(shí)都會(huì)對(duì)block內(nèi)部用到的對(duì)象進(jìn)行強(qiáng)引用(ARC)或者retainCount增1(非ARC)酒贬。在ARC與非ARC環(huán)境下對(duì)block使用不當(dāng)都會(huì)引起循環(huán)引用問(wèn)題填大。 一般表現(xiàn)為: 1.某個(gè)類將block作為自己的屬性變量诽俯,然后該類在block的方法體里面又使用了該類本身顷牌,簡(jiǎn)單說(shuō)就是:

self.someBlock = ^(Type var){
[self dosomething];
self.otherVar = XXX;// 或者_(dá)otherVar = ...
};

block的這種循環(huán)引用會(huì)被編譯器捕捉到并及時(shí)提醒尼斧。(這個(gè)還是很人性化的)

// Created by 58 on 15/6/3.
// Copyright (c) 2015年 58. All rights reserved.
//
#import"TsetBlock.h"
void (^blockTest)(NSString *str,NSString *st );
typedefvoid (^blockT)(NSString *str,NSString *st );

@interfaceTsetBlock ()@property (nonatomic)NSArray *testArr;
@property (nonatomic ,copy)blockT block;
@end

@implementation TsetBlock

- (id)init{
 if (self = [superinit]) {
   self.testArr =@[@"你",@"覺(jué)",@"的",@"會(huì)",@"怎",@"樣"]; 
   self.block = ^(NSString *name,NSString *str){      
    NSLog(@"arr:%@",self.testArr); 
   };
 }
 returnself;
}
@end

那么問(wèn)題來(lái)了:

Paste_Image.png

網(wǎng)上大部分帖子都表述為“block里面引用了self導(dǎo)致循環(huán)引用”霜旧,但事實(shí)真的是如此嗎冯吓?我表示懷疑棚潦,其實(shí)這種說(shuō)法是不嚴(yán)謹(jǐn)?shù)牧钇灰欢ㄒ@式地出現(xiàn)”self”字眼才會(huì)引起循環(huán)引用。我們改一下代碼丸边,不通過(guò)屬性self.arr去訪問(wèn)arr變量叠必,而是通過(guò)實(shí)例變量_arr去訪問(wèn),如下:
Paste_Image.png

很明顯了: 即使在你的block代碼中沒(méi)有顯式地出現(xiàn)”self”妹窖,也會(huì)出現(xiàn)循環(huán)引用纬朝!只要你在block里用到了self所擁有的東西!但對(duì)于這種情況骄呼,目前我不知道該如何排除掉循環(huán)引用共苛,因?yàn)槲覀儫o(wú)法通過(guò)加__weak聲明或者_(dá)_block聲明去禁止block對(duì)self進(jìn)行強(qiáng)引用或者強(qiáng)制增加引用計(jì)數(shù)。對(duì)于self.arr的情況谒麦,我們要分兩種環(huán)境去解決:
1.arc:__weaktypeof(self) weakSelf=self; 其實(shí) __weak someClass *weakSelf = self也是OK的6矶铩6咧隆绕德!
2.MRC:解決方式與上述基本一致,只不過(guò)將__weak關(guān)鍵字換成__block即可摊阀,這樣的意思是告訴block:孫子耻蛇,咱們已經(jīng)沒(méi)有關(guān)系了(不要在內(nèi)部對(duì)self進(jìn)行retain了)踪蹬!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市臣咖,隨后出現(xiàn)的幾起案子跃捣,更是在濱河造成了極大的恐慌,老刑警劉巖夺蛇,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疚漆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡刁赦,警方通過(guò)查閱死者的電腦和手機(jī)娶聘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)甚脉,“玉大人丸升,你說(shuō)我怎么就攤上這事∥保” “怎么了狡耻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)猴凹。 經(jīng)常有香客問(wèn)我夷狰,道長(zhǎng),這世上最難降的妖魔是什么郊霎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任孵淘,我火速辦了婚禮,結(jié)果婚禮上歹篓,老公的妹妹穿的比我還像新娘瘫证。我一直安慰自己,他們只是感情好庄撮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布背捌。 她就那樣靜靜地躺著,像睡著了一般洞斯。 火紅的嫁衣襯著肌膚如雪毡庆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天烙如,我揣著相機(jī)與錄音么抗,去河邊找鬼。 笑死亚铁,一個(gè)胖子當(dāng)著我的面吹牛蝇刀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播徘溢,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吞琐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捆探!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起站粟,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤黍图,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后奴烙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體助被,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年切诀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恰起。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趾牧,死狀恐怖检盼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翘单,我是刑警寧澤吨枉,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站哄芜,受9級(jí)特大地震影響貌亭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜认臊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一圃庭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧失晴,春花似錦剧腻、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至拆又,卻和暖如春儒旬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背帖族。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工栈源, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竖般,地道東北人甚垦。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓制轰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親垃杖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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