2011-04-14 60 views
1

我只是想知道:如果將對象的保留計數添加到Objective-C中的數組或字典中,它的保留計數是否會遞增?在將數組添加到數組或字典後,我能立即釋放一個特定的對象嗎?添加到數組時,保留計數會增加嗎?

+1

如果您真的打擾閱讀文檔,您可以輕鬆回答(可能更快)! – Sven 2011-04-14 10:54:43

+0

@Sven:我閱讀了文檔,但是因爲我是這個平臺的新手,所以我很想清楚地知道,我之前有一些疑問,現在很清楚。 – Hariprasad 2011-04-14 11:07:50

+0

@joe吹:我完全支持你在這方面喬...這種行爲將是令人沮喪的新用戶進入計算器.... – 2011-04-15 05:56:11

回答

4

Hariprasad,

NS [這裏集合名稱]保留的對象添加到他們作爲NSResponder類說明。其他一些事實:

  1. 您的意見:「我可以釋放它 添加後」,簡單的答案是肯定的 。對於 的對象,我經常爲 集合執行 autorelease,並且在集合之外不需要這些對象。
  2. 從集合中刪除 對象時, 引用計數遞減。如果您要確保 不會從內存中刪除 (下一個泳池 掃描),則需要保留 對象。
+0

對於你的觀點2,當涉及到從集合中添加和刪除時,autorelease池不會涉及。這些對象會立即保留並釋放,如果在從集合中刪除該對象時沒有其他人保留該對象,則該對象將在此時釋放,而不是在稍後的時間。 – 2011-04-14 16:58:48

+0

@Brad ...對於第2點我沒有提到有關autorelease池的任何信息。你的評論的其餘部分重申了我在那時所說的同樣的話。 – 2011-04-14 21:56:48

2

NSArrays保留添加到它們的任何對象。

+0

我可以釋放它後添加 – Hariprasad 2011-04-14 10:51:25

+0

和那些字典 – Hariprasad 2011-04-14 10:51:43

+1

所有的標準的可可容器保留添加到它們的對象。這意味着如果你不打算再次引用它們,你可以馬上釋放它們。你真的應該閱讀蘋果的內存管理指南。 – Sven 2011-04-14 10:53:52

5

是的,它會增加您添加的對象的保留計數,這就是爲什麼您可以在將對象添加到數組後立即釋放對象的原因。

NSObject obj1; 
obj1=[[NSObject alloc] init]; 
//obj1's retain count is 1 here. 

[array1 addobject:obj1]; 
//obj1's retain count incremented by 1, so the total retain count is 2. 

[obj1 release]; 
//obj1's retain count decremented by 1, so the total retain count is 1. 

array1將保留該對象,直到數組1本身未被釋放。

+0

謝謝烏斯曼,很好的解釋。爲此投票。 – Hariprasad 2011-04-15 05:51:38