只是試圖完全理解ARC。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!");
}
我不明白爲什麼我的NSLog語句打印。由於weakView是testView的弱引用,它不應該指向nil一旦testView設置爲nil ???
謝謝!
'init'方法不會向對象發送'autorelease'。它創建保留計數爲1的對象。無論是否使用ARC,它都是相同的。 – Adam
一些init方法可以,其他方法則不行。有一些init方法返回具有無限保留計數的對象。有一些init方法返回一個不是您分配的對象的對象。你應該**從不**依靠init方法返回一個計數爲1的對象(或任何方法。實際上,即使alloc也不應該考慮返回保證計數爲1的對象)。 –
[基本規則](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH)是:您擁有使用名稱以「alloc」,「new」,「copy」或「mutableCopy」開頭的方法創建的任何對象。這意味着當你完成它時,你必須「釋放」或「自動釋放」它。不保證保留數爲1,但這些方法至少爲1。確切地說, – Adam