我正在释放东西,但根据乐器,记忆似乎依旧存在。我只是发布指针而不是实际数据吗?如何在objective-c中发布数据? [anObject release]
或[&anObject release]
之间的区别是什么?
请原谅我对记忆和指针主题缺乏了解。
答案 0 :(得分:6)
[anObject release];
具体来说,您告诉对象将其保留计数减少1.如果它恰好降至零 - 可能由于各种原因而没有 - 那么Objective-C运行时将调用方法{{然后,它将在所有对象类型实例变量上调用-dealloc
(如果有的话,在malloc内存上调用-release
。
这里没有魔力。 free()
只是一个方法调用,就像任何其他方法调用一样。鉴于这个问题,我建议你阅读:
而且,一旦你消除了调用方法的神秘主义,请阅读本文以充分理解iPhone上的内存管理:
http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html
答案 1 :(得分:1)
[anObject release];
告诉对象将其retain
计数递减1.每次alloc
或copy
一个对象时,都会返回一个保留计数为1的对象。然后,如果再次retain
,则计数递增。或者,如果你再次使用retain属性,它会上升。
就像我说的那样,调用释放会减少这个数量。当计数达到零时,对象将被发送dealloc
(通过调用[super dealloc]
)将最终释放用于该对象的所有内存。
还有autorelease
,但我会留下让你发现。你应该阅读Memory Management docs。好好研究它们。
答案 2 :(得分:1)
通常,内存分配器在发布后(甚至永远)不会立即将内存返回给操作系统。因此,如果您正在查看的检测使用操作系统级别的统计信息,即使您释放了一些动态分配的对象,也不会看到使用率下降。