iOS-weakSelf和strongSelf

__weak __typeof(self)weakSelf = self;    //1

[self.context performBlock:^{      

        [weakSelf doSomething];          //2

        __strong __typeof(weakSelf)strongSelf = weakSelf;  //3

        [strongSelf doSomething];        

}];

關(guān)于block什么時(shí)候用這個(gè)weakSelf和strongSelf.

如果直接在blog中調(diào)用對(duì)象會(huì)被block強(qiáng)引用,這個(gè)都是常識(shí)就不說了.

1.使用__weak __typeof是在編譯的時(shí)候,另外創(chuàng)建一個(gè)weak對(duì)象來操作self.

2.因?yàn)閣eakSelf和self是兩個(gè)內(nèi)容,doSomething有可能就直接對(duì)self自身引用計(jì)數(shù)減到0了.
  所以在[weakSelf doSomething]的時(shí)候,你很難控制這里self是否就會(huì)被釋放了.weakSelf只能看著.

3.__strong __typeof在編譯的時(shí)候,實(shí)際是對(duì)weakSelf的強(qiáng)引用.
  指針連帶關(guān)系self的引用計(jì)數(shù)還會(huì)增加.但是你這個(gè)是在block里面,生命周期也只在當(dāng)前block的作用域.
  所以,當(dāng)這個(gè)block結(jié)束, strongSelf隨之也就被釋放了.同時(shí)也不會(huì)影響block外部的self的生命周期.

PS : 這里的weakSelf 和 strongSelf 配合使用是防止block中使用對(duì)象,對(duì)象出現(xiàn)空導(dǎo)致接下來的代碼出現(xiàn)問題的情況.

在研究AFN或者其他比較火的第三方框架也會(huì)常見到這種用法

weakSelf和strongSelf.png

參考博文:
透徹理解block中weakSelf和strongSelf

到底什么時(shí)候才需要在ObjC的Block中使用weakSelf/strongSelf

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容