2009-08-28 70 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

相关问题