2012-12-24 50 views
1

我已經閱讀了很多文章,但是當我幾乎做了我想我錯過了某些東西。我應該在ARC中使用零

我在我設置一個單獨對象模塊的應用程序,它比其他視圖controller.This提出單獨的對象實例別人的孩子objects.After完成任務,我是解聘控制器和設置零到Singleton對象。但是在儀器中它顯示出我的這個模塊創建的許多對象仍然是alive

我的第一個問題是 - 是解僱一個控制器釋放所有的子對象嗎?或者我必須明確地將其設置爲零。

我的應用程序仍在運行,將來這些對象將被釋放(它們不是泄漏,因爲它們沒有通過儀器泄漏顯示,也沒有保留週期),或者我必須明確強制設置它們爲零,不需要他們,他們正在浪費記憶。

爲什麼這些強壯的屬性和兩個或三個實例變量仍然剩餘時,我已經釋放它的超級父(即singelton對象)。

在對象列表中有一些更多的對象通過儀器在對象列表中顯示,名稱爲<x06...>malloc,這些對象由我的代碼方法分配。我應該擔心這些對象分配嗎?

+1

如果您正在討論屬性或實例變量,則應該澄清一下。 – Till

+0

@Till他們屬性和兩個或三個是實例變量 – codester

回答

0

駁回控制器解除分配其所有子對象或不是?

本質上沒有,這取決於。在應用程序中沒有更強的引用之後,會釋放一個對象。因此,例如,如果您有一個強大的實例變量引用您的控制器,則忽略它不會導致釋放,因爲您仍然有強烈的引用。但是,如果之後將其設置爲nil,並且沒有其他對該對象的強烈引用,那麼將其釋放,即,然後。另一方面,如果你在代碼中沒有強引用它,唯一強有力的參考是來自呈現視圖控制器,所以當它解除它時,將不會有強引用它在你的應用程序中,所以在它被解僱後它將被釋放。

爲什麼這些強屬性和兩個或三個實例變量仍然保留,當我已經釋放它的超級父對象(即singelton對象)時。

您在這裏混淆了您的術語。沒有「超級父母」這樣的東西。有超級班和超級班,但不清楚你是否有任何意見。如果您擁有無法擺脫的持久對象,請發佈您正在使用的代碼。

+0

感謝您的迴應,通過「超級父母」我的意思是他們定義的屬性和實例變量的遏制關係。實際上,我在該模塊中的所有對象都來自單身人士對象和他們有沒有關係與我的應用程序中的對象,但問題是他們不會得到dealloccated當我把這個singelton對象nil.Do你知道他們爲什麼不釋放? – codester

1

is dismissing a controller deallocate all its child object or not? or i have to explicitly set it to nil.

是它調用釋放。之後,給他們分配nil僅僅是一件事情。

nil確保您在釋放舊對象後不再指向任何垃圾。將一個零分配給一個對象或將一個NULL分配給一個存儲器指針是相似的。

release-這並不意味着該內存將從那一刻起可用。如果在那裏停留了一段時間,並且操作系統無法找到足夠的內存,那麼操作系統就會佔用內存d。

2

第一個問題: 不,它只是釋放呼叫:引用計數減少1,但在dealloc的引用計數等於0

只是檢查誰需要裁判來是dissmissing控制器後,生命的物體。

此控制器必須將所有對象的所有引用都取消分配給它,並且只有這個控制器,沒有其他人。

關於將ARC設置爲無。是的,這是一個很好的做法。 例如,所有網點自動(當您從IB拖到代碼右鍵)創建爲(非原子,弱)。 - 表示當對象釋放時它將被設置爲

此外,關於ARC,尼爾斯和其他人:http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1

相關問題