【发布时间】:2011-06-06 16:37:27
【问题描述】:
我正在编写一个 iPhone 应用程序,现在是时候开始清理内存了。
一个比我更好的程序员告诉我,每次执行分配时,我都应该在模块末尾释放内存。
这句话是不是每次有一个alloc,就应该在.m文件的dealloc部分删除??
谢谢 托尼
【问题讨论】:
我正在编写一个 iPhone 应用程序,现在是时候开始清理内存了。
一个比我更好的程序员告诉我,每次执行分配时,我都应该在模块末尾释放内存。
这句话是不是每次有一个alloc,就应该在.m文件的dealloc部分删除??
谢谢 托尼
【问题讨论】:
不要只听你的同事告诉你什么 - 阅读Memory Management Guide。
内存管理不是您最终要做的事情,因为“清理”它是您在编程时需要考虑的事情。不要仅仅依靠别人告诉你的经验法则。阅读文档,理解它们,然后使用经验法则帮助您记住它们是什么。
例如 - 当你在一个带有alloc的方法中创建一个局部变量时,你不能等到dealloc到release它,因为到那时那个变量已经超出了范围,你没有调用release on' 的对象,您有泄漏。所以 经验法则 没有任何好处。
【讨论】:
您可能需要阅读 Apple 开发者网站上的内存管理指南。基本上,您需要为您使用的每个new, copy, or alloc 提供一个release 或autorelease。但理想情况下,发布应该在调用 new, copy, or alloc 的函数中,而不是在您的 dealloc 函数中。 dealloc 应该只用于释放保留在头文件的@property 部分中的对象。
【讨论】: