在蘋果例如ARC的所有權與強,弱引用
MyViewController *myController = [[MyViewController alloc] init…];
MyViewController * __weak weakMyController = myController;
myController.completionHandler = ^(NSInteger result) {
MyViewController *strongMyController = weakMyController;
if (strongMyController) {
[strongMyController dismissViewControllerAnimated:YES completion:nil];
}
else {
// Probably nothing...
}
};
這到底是怎麼回事?我很困惑: MyViewController * strongMyController = weakMyController;
這是否意味着weakMyController對它有強烈的引用,所以它會像weakMyController的保留計數+1一樣?當您創建一個弱的iVar的強引用時會發生什麼?
謝謝,但你能解釋爲什麼這樣做不會導致保留週期?這似乎是因爲strongMyController會導致保留週期,因爲strongMyController現在是指向myController的weakMyController的所有者。 – SukyaMaki
因爲weakMyController不會以任何方式增加保留計數。弱代表不會創建保留週期的原因也是一樣的。 – MikeS
好問題!如果在塊中的任何位置使用現有的強引用myController的行,就會發生保留週期。是的,你確實在塊中創建了一個新的強引用,但只有在塊被執行時纔會創建,並且到那時myController可能會停止存在,並且'strongMyController'將會爲零。所以,這裏沒有保留週期。 – Macondo2Seattle