iOS-weakSelf和strongSelf

作者: li_礼光 | 来源:发表于2017-03-29 20:28 被阅读2289次
__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

相关文章

  • iOS-weakSelf和strongSelf

    关于block什么时候用这个weakSelf和strongSelf. 如果直接在blog中调用对象会被block强...

  • RN 调 js 核心代码

    ^{RCTJSCExecutor *strongSelf = weakSelf;if (!strongSelf |...

  • 宏定义

    1.weakSelf和strongSelf

  • weakSelf和strongSelf

    https://www.jianshu.com/p/51bb714051ea 我们发现这样确实解决了问题,但是可能...

  • weakSelf和strongSelf

    在block中常常会用到weakSelf和strong来处理block的产生循环引用的问题。 使用情况 直接在 b...

  • StrongSelf和WeakSelf

    我们在研发的过程中,为了避免循环引用常常会用weak若饮用来打破循环链 但是有时候,在异步多任务的时候,为了避免w...

  • iOS宏定义

    1 weakself和strongself #ifndef weakify #if DEBUG #ifhas_fe...

  • StrongSelf

    weakSelf : 防止循环引用 strongSelf: 防止释放 需要 强引用weakSelf,主要是处理一...

  • 不一样的书写样式

    **********************1.block中weakSelf 与 strongSelf******...

  • 使用Block时何时需要WeakSelf和StrongSelf?

    使用block时何时使用weakself和strongself 原文 现在我们用 Objective-C 写代码时...

网友评论

    本文标题:iOS-weakSelf和strongSelf

    本文链接:https://www.haomeiwen.com/subject/pryyottx.html