次の 2 つのケースを考えてみましょう。
// 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
ですか?