我释放的东西,但内存似乎仍然存在根据文书。我只是释放指针而不是实际的数据?我如何在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