我只是想知道:如果將對象的保留計數添加到Objective-C中的數組或字典中,它的保留計數是否會遞增?在將數組添加到數組或字典後,我能立即釋放一個特定的對象嗎?添加到數組時,保留計數會增加嗎?
回答
Hariprasad,
NS [這裏集合名稱]保留的對象添加到他們作爲NSResponder類說明。其他一些事實:
- 您的意見:「我可以釋放它 添加後」,簡單的答案是肯定的 。對於 的對象,我經常爲 集合執行
autorelease
,並且在集合之外不需要這些對象。 - 從集合中刪除 對象時, 引用計數遞減。如果您要確保 不會從內存中刪除 (下一個泳池 掃描),則需要保留 對象。
對於你的觀點2,當涉及到從集合中添加和刪除時,autorelease池不會涉及。這些對象會立即保留並釋放,如果在從集合中刪除該對象時沒有其他人保留該對象,則該對象將在此時釋放,而不是在稍後的時間。 – 2011-04-14 16:58:48
@Brad ...對於第2點我沒有提到有關autorelease池的任何信息。你的評論的其餘部分重申了我在那時所說的同樣的話。 – 2011-04-14 21:56:48
NSArrays保留添加到它們的任何對象。
我可以釋放它後添加 – Hariprasad 2011-04-14 10:51:25
和那些字典 – Hariprasad 2011-04-14 10:51:43
所有的標準的可可容器保留添加到它們的對象。這意味着如果你不打算再次引用它們,你可以馬上釋放它們。你真的應該閱讀蘋果的內存管理指南。 – Sven 2011-04-14 10:53:52
是的,它會增加您添加的對象的保留計數,這就是爲什麼您可以在將對象添加到數組後立即釋放對象的原因。
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本身未被釋放。
謝謝烏斯曼,很好的解釋。爲此投票。 – Hariprasad 2011-04-15 05:51:38
- 1. 嚮導航控制器添加Viewcontroller會增加保留計數嗎?
- 2. UITextView setEnabled:導致保留計數增加?
- 3. 將值添加到兩個不同的NSMutableArray,而不增加保留計數
- 4. 將元素添加到數組中不會增加其長度
- 5. 將數組添加到會話數組
- 6. 關於添加到數組的對象中保留計數的問題Obj-C
- 7. NSTimer保留數增加,爲什麼?
- 8. 是否將autorelease對象分配給保留屬性會增加其保留數?
- 9. 添加每個http請求都會增加的計數器
- 10. UIButton在觸摸後保留計數器增加
- 11. alloc + init與合成屬性 - 是否會導致保留計數增加2?
- 12. 增加一個數組計數器
- 13. 計數器增加()
- 14. 如何增加計時器計數(CountDownTimer)
- 15. 數據表不保留添加的行
- 16. 計數器變量()`宏不會增加
- 17. 元素不會添加到Javascript數組
- 18. ObjectIds不會添加到rankId數組
- 19. 將值添加到會話數組中
- 20. 每當計時器重新啓動時計數器遞增都會增加
- 21. 添加增量計數器列表
- 22. 複製時保留計數
- 23. 保持增加數組大小C++
- 24. 角NG-重複和增加新的元素添加到數組
- 25. 數組不增加
- 26. 會話數組保持覆蓋而不是添加到自己
- 27. 在添加值時向數組添加
- 28. 如何在添加到Map時將double數組添加到Double數組?
- 29. 將函數添加到計時器
- 30. 添加元素添加到數組
如果您真的打擾閱讀文檔,您可以輕鬆回答(可能更快)! – Sven 2011-04-14 10:54:43
@Sven:我閱讀了文檔,但是因爲我是這個平臺的新手,所以我很想清楚地知道,我之前有一些疑問,現在很清楚。 – Hariprasad 2011-04-14 11:07:50
@joe吹:我完全支持你在這方面喬...這種行爲將是令人沮喪的新用戶進入計算器.... – 2011-04-15 05:56:11