系统方法解读iOS开发资料收集

iOS-weakSelf和strongSelf

2017-03-29  本文已影响2289人  li_礼光
__weak __typeof(self)weakSelf = self;    //1

[self.context performBlock:^{      

        [weakSelf doSomething];          //2

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

        [strongSelf doSomething];        

}];

关于block什么时候用这个weakSelf和strongSelf.

如果直接在blog中调用对象会被block强引用,这个都是常识就不说了.

1.使用__weak __typeof是在编译的时候,另外创建一个weak对象来操作self.

2.因为weakSelf和self是两个内容,doSomething有可能就直接对self自身引用计数减到0了.
  所以在[weakSelf doSomething]的时候,你很难控制这里self是否就会被释放了.weakSelf只能看着.

3.__strong __typeof在编译的时候,实际是对weakSelf的强引用.
  指针连带关系self的引用计数还会增加.但是你这个是在block里面,生命周期也只在当前block的作用域.
  所以,当这个block结束, strongSelf随之也就被释放了.同时也不会影响block外部的self的生命周期.

PS : 这里的weakSelf 和 strongSelf 配合使用是防止block中使用对象,对象出现空导致接下来的代码出现问题的情况.

在研究AFN或者其他比较火的第三方框架也会常见到这种用法

weakSelf和strongSelf.png

参考博文:
透彻理解block中weakSelf和strongSelf

到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf

上一篇下一篇

猜你喜欢

热点阅读