概念
兩個對象相互持有,這樣就會造成循環引用,如下圖所示
注意
只要 block中用到了對象的屬性或者函數,block就會持有該對象而不是該對象中的某個屬性或者函數。
__block __weak __typeof(_currentModel) weakModel = _currentModel;
self.aView = [[HYBAView alloc] initWithBlock:^(id model) {
// 假設要更新model
weakModel = model;
}];
疑惑:_currentModel
本身就是實例變量,這里為什么還要加上__block
?
猜測:__typeof
之后,編譯器無法識別weakModel是否是實例變量,編譯器把它當做是局部變量了,所以要加上 __block