0

比方說,B就掌握弱引用A,和A具有較強的爲B弱引用被dealloced對象是零,dealloc中完成之前

一個的dealloc的

- (void)dealloc { 

    [self.b foo]; 
    self.b = nil; 

} 

的富

- (void)foo { 

    NSLog(@"%@", self.a); 
    //using self.a weak reference to A, which is nil; 

} 

爲什麼弱引用不爲零的dealloc後 已經完成了?這是什麼原因,我可以阻止它嗎?是否有可能在dealloc之前調用的方法?

+1

[弱屬性在dealloc中設置爲零,但屬性的ivar不爲零](http://stackoverflow.com/questions/16122347/weak-property-is-set-to-nil-in-dealloc -but-propertys-ivar-is-not-nil) –

回答

0

兩個矛盾:

1.A)在你的代碼說明:

...弱引用A,這是零

1.B)在你的問題,你說:

...爲什麼弱參考不爲零

根據上面的1.A),它沒有按預期那樣。


2.A)在你的問題你的狀態

... AFTER的dealloc完成

2.B)在你的代碼在dealloc方法

調用一個函數 foo

在完成dealloc後,Foo不會被執行。一旦你從dealloc方法返回,dealloc就完成了。另外,如果使用ARC,則不會調用[super dealloc],但如果您未使用自動引用計數,則會丟失。

+0

但是當A調用B的foo時,比A的弱指針已經爲零,即使當A的dealloc還沒有完成時 –

+0

當dealloc被調用時,A終止所有弱指針,而它仍然有自己的強指針。 – Mundi

+0

是的,但如何避免這一點......或者有沒有一種方法在dealloc之前被調用,其中A的弱引用不保存爲零? –

相關問題