iOS中delegate和IBOutlet為何使用弱引用

有時(shí)候一些理所當(dāng)然的事,一細(xì)想之后才發(fā)現(xiàn)窿祥,沒那么簡(jiǎn)單。

問:為何delegate要用weak引用蝙寨,而不是strong?
答:避免循環(huán)引用晒衩,防止內(nèi)存泄漏!

好墙歪!假設(shè)有AVC和BVC兩個(gè)ViewController听系,AVC推出BVC,在推出BVC之前虹菲,AVC將自己設(shè)為BVC的delegate靠胜。代碼看起來是這樣的:

// AVC.m

- (void)pushBVC
{
    BVC *bvc = [BVC new];
    bvc.delegate = self;
    [self.navigationController pushViewController: bvc animated:YES];
}

在這樣的環(huán)境下,如果bvc的delegate引用如果是strong毕源,是否會(huì)造成循環(huán)引用髓帽?

// BVC.h

@property (nonatomic, strong) id<BVCDelegate> delegate;

來分析一下。bvc的delegate指向了AVC的實(shí)例脑豹,是個(gè)強(qiáng)引用郑藏。但是,AVC實(shí)例并沒有引用bvc這塊對(duì)象瘩欺,只是將bvc壓到navigationController的棧里了必盖。所以并沒有循環(huán)引用拌牲。

那為什么我們平時(shí)都用weak而不用strong呢?

一歌粥、就這種情況下而言塌忽,如果使用了strong,avc的引用計(jì)數(shù)+1失驶。然而在棧里面土居,bvc一定是比avc先釋放的,bvc一釋放嬉探,引用計(jì)數(shù)又減1了擦耀。也就是說這個(gè)引用計(jì)數(shù)+1的操作一點(diǎn)意義都沒有。bvc在涩堤,avc一定在眷蜓。

二、再說說UITableView的delegate和datasource胎围,這里如果改成strong引用吁系,對(duì)不起,循環(huán)引用白魂!為什么汽纤,因?yàn)檫@個(gè)tableview確確實(shí)實(shí)是當(dāng)前vc所持有的,是strong引用了的福荸,而這時(shí)如果tableview再strong引用自己的delegate or datasource蕴坪,肯定循環(huán)引用。所以這種情況下逞姿,必須用weak。

三捆等、那IBOutlet呢滞造,一般都是weak,能用strong么栋烤?

viewfromxib.png

看圖說話谒养,我們創(chuàng)建VC的同時(shí)創(chuàng)建的xib,等同于我們操作的self.view, self對(duì)view是強(qiáng)引用的明郭,所有這些子view又都在self.view.subviews的數(shù)組中买窟,也就是已經(jīng)強(qiáng)引用這些子view了,所以我們?cè)贗BOutlet的時(shí)候無需再用strong薯定,weak就行始绍。看下圖:


subviewlist.png

如果你用了strong话侄,引用計(jì)數(shù)一定還會(huì)再+1亏推,這時(shí)子視圖可能就會(huì)釋放不掉学赛,你需要自己在正確的時(shí)機(jī)釋放。

還有一種情況吞杭,你的xib中除了原先的view之外盏浇,又創(chuàng)建了一個(gè)viewB,這個(gè)時(shí)候viewB沒有被任何人引用芽狗,和self.view也沒有關(guān)系绢掰,也不在self.view.subviews中。那么你在IBOutlet鏈接這個(gè)viewB的時(shí)候就必須用strong童擎,而不是weak了滴劲。

如果有不正確的地方歡迎指出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末柔昼,一起剝皮案震驚了整個(gè)濱河市哑芹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捕透,老刑警劉巖聪姿,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異乙嘀,居然都是意外死亡末购,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門虎谢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盟榴,“玉大人,你說我怎么就攤上這事婴噩∏娉。” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵几莽,是天一觀的道長(zhǎng)迅办。 經(jīng)常有香客問我,道長(zhǎng)章蚣,這世上最難降的妖魔是什么站欺? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮纤垂,結(jié)果婚禮上矾策,老公的妹妹穿的比我還像新娘。我一直安慰自己峭沦,他們只是感情好贾虽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吼鱼,像睡著了一般榄鉴。 火紅的嫁衣襯著肌膚如雪履磨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天庆尘,我揣著相機(jī)與錄音剃诅,去河邊找鬼。 笑死驶忌,一個(gè)胖子當(dāng)著我的面吹牛矛辕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播付魔,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼聊品,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了几苍?” 一聲冷哼從身側(cè)響起翻屈,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妻坝,沒想到半個(gè)月后伸眶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刽宪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年厘贼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圣拄。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘴秸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庇谆,到底是詐尸還是另有隱情岳掐,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布饭耳,位于F島的核電站串述,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哥攘。R本人自食惡果不足惜剖煌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一材鹦、第九天 我趴在偏房一處隱蔽的房頂上張望逝淹。 院中可真熱鬧,春花似錦桶唐、人聲如沸栅葡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欣簇。三九已至规脸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熊咽,已是汗流浹背莫鸭。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留横殴,地道東北人被因。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像衫仑,于是被迫代替她去往敵國(guó)和親梨与。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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