2012-08-22 54 views
0

我正在分配一個對象,如如果我強制指向一個分配對象的指針爲零,ARC會做什麼?

A * a = [[A alloc] init];

另一點我有力地設置

一個=零;

它是否向ARC發出消息,表明該對象現在可以被釋放?

+0

我會說你剛剛回答你自己的問題。它觸發釋放方法,如果他們保持計數爲零,則會被銷燬。 – MrBr

+0

哦...知道了!如果其他人仍然持有該對象,它不會被釋放.. rt?謝啦! – Advaith

+0

@Advaith如果有人「持有」該對象,它不會被釋放。 ARC不是魔術,它只是在你的代碼中爲你寫入保留/釋放消息。設置一些變量爲零是沒有什麼不尋常的。 – fzwo

回答

2

快速回答 - 是的。 一旦你將對象設置爲零,它會被弧殺死(大多數情況下,根據我的經驗,你可以信任ARC)

弧中的Dealloc方法將爲你創建。您不能直接進行dealloc調用。但是,如果您需要釋放實例變量以外的資源,仍然可以創建自定義的dealloc方法。在創建自定義的dealloc方法時,不要調用[super dealloc]方法。這將爲您完成,並由編譯器執行。

你可以閱讀更多關於它here

+0

嘿,我在那裏有一個疑問:-o如果相同的對象被2個指針強烈地引用,並且我們將指針的一個指向了nil,那該怎麼辦?在這種情況下,對象不會被釋放.. rt? – Advaith

+2

它會收到一個釋放電話。但是如果另一個指針持有對該對象的強引用,它將不會被移出內存,因爲retainCount仍然是1 – MrBr

+1

該對象不會被ARC殺死,但會接收到一個釋放對象,一。一旦保留計數下降到零,對象將被殺死。每個強引用都會保留該對象,將保留計數遞增1,因此如果有2個對象強引用,則其保留計數爲2,如果您沒有其中一個引用,則它將降至1,但該對象將仍然在那裏! – JustSid

0

我想你是指向原來的對象(空你分配/ init建立一個對象)將被釋放,但你仍然可以使用「一個 「指針,並指向另一個對象。

+0

顯然,這是指針如何工作... – JustSid

+0

很明顯,但這就是我得到的問題... – rdurand

相關問題