Objective C - 内存管理和自动释放???

Posted

技术标签:

【中文标题】Objective C - 内存管理和自动释放???【英文标题】:Objective C - Memory Management and autorelease ??? 【发布时间】:2011-07-28 17:42:37 【问题描述】:

自动释放是否保证在块结束时对象将被释放?

还是手动释放对象更好?

【问题讨论】:

我认为这可能是有益的 - ***.com/questions/3433274/objective-c-autorelease 【参考方案1】:

它保证它会在块执行后某个时间被释放,不一定在之后立即释放。由运行时确定确切的时间。

这没什么大不了的,除非您使用大量自动释放变量进行操作,例如在大循环中创建它们,或者如果您正在创建大型自动释放对象,例如 UIImages。在这些情况下,您应该在完成后手动释放,否则自动释放是完全可以接受的。

【讨论】:

+1,唯一提到这个问题中一个重点的答案:blocks【参考方案2】:

如果一个对象是autoreleased,你不能手动release它(当然除非它是retained)。作为 UIKit 事件处理程序一部分的 NSAutoRelease 池将为您提供release。如果您要手动release 对象,则池可能会导致崩溃或其他未定义的行为,因为该对象将是双重的-released。

如果在某些情况下您生成大量对象或在对象中使用大量内存,您可以通过创建自己的NSAutoReleasePool 抢先autorelease 它们(可能在您的循环中) - 池可以嵌套.

【讨论】:

【参考方案3】:

最好释放对象而不是自动释放,除非您有明确的理由使用自动释放,例如在返回方法保留的对象时使用自动释放并且您无法避免。

基本上自动释放应该作为完全避免内存管理的借口。您希望尽快释放对象。 Autorelease 只是说该对象将在将来的某个时间释放。

【讨论】:

以上是关于Objective C - 内存管理和自动释放???的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C内存管理之自动释放池

Objective-C内存管理之自动释放池

Objective-C 自动释放内存管理

使用 NSNumberFormatter 循环中的 Objective C 自动释放

Objective-C 自动释放池不释放对象

一个简单的 Objective C xcode 内存管理问题