Block的循环引用

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....我们只要找到这个引用环,把其中一个对象改成弱引用就好了.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容