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。