循环引用

概念

两个对象相互持有,这样就会造成循环引用,如下图所示


注意

只要 block中用到了对象的属性或者函数,block就会持有该对象而不是该对象中的某个属性或者函数。


__block __weak __typeof(_currentModel) weakModel = _currentModel;
self.aView = [[HYBAView alloc] initWithBlock:^(id model) {
  // 假设要更新model
  weakModel = model;
}];

疑惑_currentModel 本身就是实例变量,这里为什么还要加上__block

猜测__typeof之后,编译器无法识别weakModel是否是实例变量,编译器把它当做是局部变量了,所以要加上 __block

参考

iOS中block的循环引用问题

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

推荐阅读更多精彩内容