我釋放的東西,但內存似乎仍然存在根據文書。我只是釋放指針而不是實際的數據?我如何在objective-c中釋放數據? [anObject release]
或[&anObject release]
有什麼區別?如何釋放ACTUAL內存,而不僅僅是指向內存的指針?
請原諒我缺乏關於內存和指針的知識。
我釋放的東西,但內存似乎仍然存在根據文書。我只是釋放指針而不是實際的數據?我如何在objective-c中釋放數據? [anObject release]
或[&anObject release]
有什麼區別?如何釋放ACTUAL內存,而不僅僅是指向內存的指針?
請原諒我缺乏關於內存和指針的知識。
[anObject release];
具體來說,你說的是對象1。如果它發生降至零遞減其保留計數 - 它可能不適合各種各樣的原因 - 那麼Objective-C的運行時將調用方法-dealloc
然後將調用-release
所有的對象類型實例變量(和malloc'd內存上的free()
,如果有的話)。
這裏沒有魔法。 release
只是一個像其他方法調用一樣的方法調用。考慮到這個問題,我建議你閱讀本:
而且,一旦你已經打消了調用方法的神祕主義,讀這在iPhone上充分理解內存管理:
http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html
是的,我會閱讀文檔。謝謝 – RexOnRoids 2009-08-28 03:56:57
酷 - 這樣做。概念指南確實是一個很棒的開始。 – bbum 2009-08-28 08:25:45
[anObject release];
告知對象按1遞減其retain
數,您alloc
或copy
的對象,則返回一個對象具有一個的保留計數每次。然後,如果您再次使用retain
,則計數會遞增。或者,如果您使用保留屬性,則它會再次上升。
正如我所說的,調用釋放會減少此計數。當計數達到零時,對象被髮送dealloc
哪些(通過調用[super dealloc]
)最終將釋放所有用於該對象的內存。
還有autorelease
,但我會留給你去發現。您應該閱讀Memory Management docs。好好研究一下。
通常情況下,內存分配程序不會在釋放後(或甚至曾經)立即將內存返回操作系統。因此,如果您正在查看的工具使用操作系統級別的統計信息,即使您釋放了一些動態分配的對象,也不會看到用法下降。
哦。我不知道。我正在使用iPhone SDK的泄漏工具,通常我可以看到對象分配(活動對象)的圖形立即下降,但在這種情況下,它與衆不同......調用[&anObject release]是什麼做BTW? – RexOnRoids 2009-08-28 03:50:58
我不知道。我從未在我的生活中寫過一行Objective-C。 – Novelocrat 2009-08-28 04:22:03
我不認爲「[&anObject發佈];」甚至是有效的Objective-C。假設「anObject」具有「NSObject *」或「id」類型,這意味着「&anObject」將是指向對象的指針。 – rpetrich 2009-08-28 15:58:05