__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