autorelease是否保证在块结束时对象将被释放?
或者手动释放对象更好吗?
答案 0 :(得分:7)
它保证在块执行后某个时间将被释放,不一定紧接在之后。由运行时决定何时确定。
除非你正在使用大量自动释放的变量,比如在大循环中创建它们,或者如果你正在创建大型的自动释放对象(如UIImages),这并不是什么大不了的事。在这些情况下,您应该在通过时手动释放,否则自动释放是完全可以接受的。
答案 1 :(得分:1)
如果某个对象是autorelease
d,则您不能手动release
它(当然除非它是retain
)。作为UIKit事件处理程序一部分的NSAutoRelease池将为您release
。如果您要手动release
该对象,则该池可能会导致崩溃或其他未定义的行为,因为该对象将是双倍的 - release
d。
如果在某些情况下您生成了大量对象或在对象中使用了大量内存,您可以通过创建自己的autorelease
来先发制人NSAutoReleasePool
它们(可能在您的循环中) - 池可以嵌套。
答案 2 :(得分:0)
最好释放对象而不是自动释放,除非你有明确的理由使用自动释放,例如在返回对象时使用自动释放方法保留并且你无法避免它。
基本上应该使用autorelease作为完全避免内存管理的借口。您希望尽快释放对象。 Autorelease只是说该对象将在未来的某个时间发布。