block 外部使用weak弱引用,里面使用strong强引用,

2018-08-30  本文已影响20人  Roadsourth

先看下面这个列子

    __weak typeof(student) weakSelf = student;

    student.study = ^{

        __strong typeof(student) strongSelf = weakSelf;

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

            NSLog(@"my name is = %@",strongSelf.name);

        });

   };

很多人会问,block里面strong强引用了,会不会导致self无法释放,最终造成循环引用。起初我也很疑惑,最终在下面的这篇文章中找到了答案:http://ios.jobbole.com/88708/

里面有个很关键的一段话,摘录下来:

weakSelf 是为了block不持有self,避免Retain Circle循环引用。在 Block 内如果需要访问 self 的方法、变量,建议使用 weakSelf。strongSelf的目的是因为一旦进入block执行,假设不允许self在这个执行过程中释放,就需要加入strongSelf。block执行完后这个strongSelf 会自动释放,没有不会存在循环引用问题。如果在 Block 内需要多次 访问 self,则需要使用 strongSelf。

上一篇下一篇

猜你喜欢

热点阅读