概念
两个对象相互持有,这样就会造成循环引用,如下图所示
注意
只要 block中用到了对象的属性或者函数,block就会持有该对象而不是该对象中的某个属性或者函数。
__block __weak __typeof(_currentModel) weakModel = _currentModel;
self.aView = [[HYBAView alloc] initWithBlock:^(id model) {
// 假设要更新model
weakModel = model;
}];
疑惑:_currentModel
本身就是实例变量,这里为什么还要加上__block
?
猜测:__typeof
之后,编译器无法识别weakModel是否是实例变量,编译器把它当做是局部变量了,所以要加上 __block