2012-09-26 35 views
4

我知道這個主題有很多問題。我從未參與過基於非ARC的項目。該版本如何在基於ARC的項目中工作

我有很強的&弱屬性如下

@property(strong,nonatomic)NSArray *data1; 
@property(unsafe_unretained, nonatomic)NSArray *data2; 

我已經看到了一些地方的人明確作出在viewDidUnload數據爲零。

-(void)viewDidUnload{ 
    self.data1=nil; 
    self.data2=nil; 
} 

我的問題是,如果我不這樣做在我的情況(我的意思是,如果我不要讓在viewDidUnload數據1和數據2零

),威爾ARC自動釋放的對象?

回答

2

是的,ARC會在銷燬父對象之前自動釋放所有強引用屬性/變量。至於「弱」的引用,它們不被保留/釋放(這與ARC或沒有ARC相同)。

設置self.data1 = nilviewDidUnload通常是不必要的,但有時您想明確指出您的引用對象是在哪裏釋放的。如果你想確保你的data1就在這裏的這行代碼發佈,使用你的代碼。如果你不關心它何時何地發佈,你不需要。

+0

非常感謝您的快速幫助。 – Raj

+0

btw,viewDidUnload已棄用。誰能解釋unsafe_unretained和weak修飾符之間的區別? – Stas

+0

當指向的對象被釋放時,弱引用變爲零,不安全的引用不會(即像ARC之前懸掛指針)。出於兼容性原因,您應該只使用不安全。 – borrrden

3

是的,它們將在您的視圖控制器被釋放時釋放。 viewDidUnload(不再稱爲iOS 6)與dealloc不同,它也不是viewDidLoad的「相反」 - 它僅在內存不足的情況下才會調用,此時視圖不在屏幕上。

任何瞬態,內存佔用的對象應設置爲零didReceiveMemoryWarning - ARC將而不是自動爲您做。

+0

感謝您的快速回復 – Raj

相關問題