2009-08-28 69 views
1

我釋放的東西,但內存似乎仍然存在根據文書。我只是釋放指針而不是實際的數據?我如何在objective-c中釋放數據? [anObject release][&anObject release]有什麼區別?如何釋放ACTUAL內存,而不僅僅是指向內存的指針?

請原諒我缺乏關於內存和指針的知識。

+0

我不認爲「[&anObject發佈];」甚至是有效的Objective-C。假設「anObject」具有「NSObject *」或「id」類型,這意味着「&anObject」將是指向對象的指針。 – rpetrich 2009-08-28 15:58:05

回答

6
[anObject release]; 

具體來說,你說的是對象1。如果它發生降至零遞減其保留計數 - 它可能不適合各種各樣的原因 - 那麼Objective-C的運行時將調用方法-dealloc然後將調用-release所有的對象類型實例變量(和malloc'd內存上的free(),如果有的話)。

這裏沒有魔法。 release只是一個像其他方法調用一樣的方法調用。考慮到這個問題,我建議你閱讀本:

http://developer.apple.com/IPhone/library/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

而且,一旦你已經打消了調用方法的神祕主義,讀這在iPhone上充分理解內存管理:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

+0

是的,我會閱讀文檔。謝謝 – RexOnRoids 2009-08-28 03:56:57

+0

酷 - 這樣做。概念指南確實是一個很棒的開始。 – bbum 2009-08-28 08:25:45

1
[anObject release]; 

告知對象按1遞減其retain數,您alloccopy的對象,則返回一個對象具有一個的保留計數每次。然後,如果您再次使用retain,則計數會遞增。或者,如果您使用保留屬性,則它會再次上升。

正如我所說的,調用釋放會減少此計數。當計數達到零時,對象被髮送dealloc哪些(通過調用[super dealloc])最終將釋放所有用於該對象的內存。

還有autorelease,但我會留給你去發現。您應該閱讀Memory Management docs。好好研究一下。

1

通常情況下,內存分配程序不會在釋放後(或甚至曾經)立即將內存返回操作系統。因此,如果您正在查看的工具使用操作系統級別的統計信息,即使您釋放了一些動態分配的對象,也不會看到用法下降。

+0

哦。我不知道。我正在使用iPhone SDK的泄漏工具,通常我可以看到對象分配(活動對象)的圖形立即下降,但在這種情況下,它與衆不同......調用[&anObject release]是什麼做BTW? – RexOnRoids 2009-08-28 03:50:58

+0

我不知道。我從未在我的生活中寫過一行Objective-C。 – Novelocrat 2009-08-28 04:22:03

相關問題