我注意到在Objective-C與ARC以下啓用:弱屬性被設置爲在dealloc的,但酒店的伊娃無不是零
讓我們簡單的A類和autosynthesized弱財產
@interface A
@property (nonatomic, weak) id refObject;
@end
@implementation A
@end
而且與第二的dealloc B類實現
@interface B
@end
@implementation B
-(void) dealloc
{
NSLog(@"In dealloc");
}
@end
最後介於A類有以下幾點:
@implementation A
...
-(void) foo
{
B* b = [B new];
self.refObject = b;
// Just use b after the weak assignment
// in order to not dealloc 'b' before assignement
NSLog(@"%@", b);
}
...
@end
如果我在[B dealloc]
設置一個斷點,並檢查[A refObject]
財產,我可以看到a.refObject
是零,但a->_refObject
不是零,點到「b」
任何想法,爲什麼出現這種情況?
說不定什麼時候知道弱裁判應該被清除,但實例變量本身保持不變(和釋放,而現在它是一個懸擺指針)存取方法返回'nil'。 – 2013-04-20 16:05:45
我認爲,在dealloc的對象仍然是有效的,但不會被刪除。例如,您可以從NSNotificationCenter註銷它並可以訪問其屬性。 – 2013-04-20 16:15:30
「您可以訪問它」並不一定意味着它不釋放,但我可能是錯的。 – 2013-04-20 16:16:34