Block的循环引用
2017-01-08 本文已影响0人
浪尘子
Block的循环引用(需要完全掌握)
5.1造成Block循环引用的条件:"Block强引用self"并且"self强引用Block"
//定义属性使用copy,表示`self`强引用`task`
@property(nonatomic,copy)void(^task)();
// block内部访问了`self`,会对`self`进行拷贝(强引用,引用计数+1)
void(^task)() = ^{
NSLog(@"%@ - %@",self.view);
};
// self --> task --> self
self.task = task;
5.2如何解决Block的循环引用
//解决:使用__weak修饰self
__weaktypeof(self) weakSelf =self;
__weakViewController *weakSelf =self;
小节下: 记住一点所有的循环应用都是self强引用了对象,对象又强引用了self....我们只要找到这个引用环,把其中一个对象改成弱引用就好了.