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】:如果一个对象是autorelease
d,你不能手动release
它(当然除非它是retain
ed)。作为 UIKit 事件处理程序一部分的 NSAutoRelease 池将为您提供release
。如果您要手动release
对象,则池可能会导致崩溃或其他未定义的行为,因为该对象将是双重的-release
d。
如果在某些情况下您生成大量对象或在对象中使用大量内存,您可以通过创建自己的NSAutoReleasePool
抢先autorelease
它们(可能在您的循环中) - 池可以嵌套.
【讨论】:
【参考方案3】:最好释放对象而不是自动释放,除非您有明确的理由使用自动释放,例如在返回方法保留的对象时使用自动释放并且您无法避免。
基本上自动释放应该作为完全避免内存管理的借口。您希望尽快释放对象。 Autorelease 只是说该对象将在将来的某个时间释放。
【讨论】:
以上是关于Objective C - 内存管理和自动释放???的主要内容,如果未能解决你的问题,请参考以下文章