循环引用

2017-06-13  本文已影响9人  简洁的想法

概念

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


注意

只要 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的循环引用问题

上一篇 下一篇

猜你喜欢

热点阅读