簡體   English   中英

我應該在ARC中使用nil嗎?

[英]Should i use nil in ARC

我讀了很多文章,但是當我做的時候,我覺得我錯過了一些東西。

我有一個應用程序,其中我正在為其他視圖控制器提供模塊的單例對象。這個單例對象實例化其他子對象。完成任務后我解除控制器並將nil設置為單例對象。但是在儀器中它顯示我的這個模塊創建的許多對象仍然存在

我的第一個問題是 - 解雇控制器是否解除分配所有子對象? 或者我必須明確地將其設置為零。

我的應用程序仍在運行,這些對象將來會被解除分配(它們不會泄漏,因為它們沒有被儀器泄漏顯示並且沒有保留周期)或者我必須通過將它們設置為nil而明確強制,因為我不需要它們正在浪費記憶力。

當我釋放其超級父(即singelton對象)時,為什么這些強大的屬性和兩個或三個實例變量仍然存在。

對象列表中的工具顯示的更多對象具有名稱<x06...>malloc ,它們是由我的代碼方法分配的。我應該擔心這些對象分配嗎?

第一個問題:不,它只是調用釋放:引用計數減1,但引用計數等於0時dealloc。

只需檢查誰解雇控制器后對誰生活的對象。

該控制器必須對所有將要釋放它的對象進行所有引用,並且只有這個控制器,不能再使用它。

關於在ARC中設置為nil。 是的,這是一個很好的做法。 例如,所有出口自動(當您從IB拖動到帶右鍵的代碼時)被創建為(非原子,弱)。 - 意味着當對象解除分配時它將被設置為nil

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

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

是的它叫發布。 之后,為他們分配nil只是一件事。

nil確保您在釋放舊物體后不再指向任何垃圾。 將nil指定給對象或將NULL指定給內存指針是類似的。

release並不意味着從那個時刻開始就可以獲得內存。 如果在那里停留相當長的時間,如果操作系統無法找到足夠的內存比這些release -d內存中采取的OS。

解雇控制器是否解除分配所有子對象?

不是本質上,不是。 這取決於。 在應用程序中沒有對它的強引用之后,將釋放一個對象。

因此,例如,如果您有一個強大的實例變量引用您的控制器,則解除它不會導致重新分配,因為您仍然有一個強引用它。 但是,如果之后將其設置為nil ,並且沒有對該對象的其他強引用, 那么它將被取消分配。

另一方面,如果你的代碼中沒有對它的強引用,那么對它的唯一強引用來自於呈現視圖控制器,所以當它解除它時,你的應用程序中就沒有對它的強引用,因此在被解雇后將被解除分配。

當我釋放其超級父(即singelton對象)時,為什么這些強大的屬性和兩個或三個實例變量仍然存在。

你在這里混淆了你的術語。 沒有“超級父母”這樣的東西。 有超級和超級視圖,但不清楚你是否意味着它們中的任何一個。 如果您有無法擺脫的持久對象,請發布您正在使用的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM