考慮以下兩種情況:弱引用何時在Objective-C中更新爲零?
// case 1
NSObject *strongOne = [[NSObject alloc] init];
NSObject * __weak weakOne = strongOne;
if (weakOne) {
NSLog(@"weakOne is not nil.");
} else {
NSLog(@"weakOne is nil.");
}
strongOne = nil;
if (weakOne) {
NSLog(@"weakOne is not nil.");
} else {
NSLog(@"weakOne is nil.");
}
輸出這樣的:
weakOne is not nil.
weakOne is not nil.
而且
// case 2
NSObject *strongOne = [[NSObject alloc] init];
NSObject * __weak weakOne = strongOne;
strongOne = nil;
if (weakOne) {
NSLog(@"weakOne is not nil.");
} else {
NSLog(@"weakOne is nil.");
}
輸出這樣的:
weakOne is nil.
至於我知道,當strongOne
被解除分配時,對同一對象的弱引用應該更新爲nil
。
我的問題:爲什麼只有在case 2
?
您還應該使用Release-build而不是Debug對其進行測試。結果可能不同...... –