arc,强弱实例变量

Wis*_*erd 3 objective-c automatic-ref-counting

只是想完全理解ARC.

MyView *testView = [[MyView alloc] init];

__weak MyView *weakView = testView;

[weakView addObserver:self forKeyPath:@"alpha" options:0 context:nil];

testView = nil;

if(weakView) {
     NSLog(@"WeakView exists!");
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我的NSLog语句正在打印.由于weakView是对testView的弱引用,一旦testView设置为nil,它不应该指向nil吗?

谢谢!

Ada*_*dam 7

addObserver方法似乎retainautorelease视图.这就是为什么弱参考在初始参考被填充之后不会归零.只需在调试器中运行此代码:

UIView *testView = [[UIView alloc] init];

__weak UIView *weakView = testView;

@autoreleasepool {
    [weakView addObserver:self forKeyPath:@"alpha" options:0 context:nil];
}

testView = nil;

if(weakView) {
    NSLog(@"WeakView exists!");
}
Run Code Online (Sandbox Code Playgroud)