如何释放ACTUAL内存而不仅仅是指向内存的指针?

时间:2009-08-28 03:10:37

标签: objective-c pointers memory-management

我正在释放东西,但根据乐器,记忆似乎依旧存在。我只是发布指针而不是实际数据吗?如何在objective-c中发布数据? [anObject release][&anObject release]之间的区别是什么?

请原谅我对记忆和指针主题缺乏了解。

3 个答案:

答案 0 :(得分:6)

[anObject release];

具体来说,您告诉对象将其保留计数减少1.如果它恰好降至零 - 可能由于各种原因而没有 - 那么Objective-C运行时将调用方法{{然后,它将在所有对象类型实例变量上调用-dealloc(如果有的话,在malloc内存上调用-release

这里没有魔力。 free()只是一个方法调用,就像任何其他方法调用一样。鉴于这个问题,我建议你阅读:

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

答案 1 :(得分:1)

[anObject release];

告诉对象将其retain计数递减1.每次alloccopy一个对象时,都会返回一个保留计数为1的对象。然后,如果再次retain,则计数递增。或者,如果你再次使用retain属性,它会上升。

就像我说的那样,调用释放会减少这个数量。当计数达到零时,对象将被发送dealloc(通过调用[super dealloc])将最终释放用于该对象的所有内存。

还有autorelease,但我会留下让你发现。你应该阅读Memory Management docs。好好研究它们。

答案 2 :(得分:1)

通常,内存分配器在发布后(甚至永远)不会立即将内存返回给操作系统。因此,如果您正在查看的检测使用操作系统级别的统计信息,即使您释放了一些动态分配的对象,也不会看到使用率下降。