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

时间:2011-07-28 17:42:37

标签: objective-c memory-management autorelease

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

或者手动释放对象更好吗?

3 个答案:

答案 0 :(得分:7)

它保证在块执行后某个时间将被释放,不一定紧接在之后。由运行时决定何时确定。

除非你正在使用大量自动释放的变量,比如在大循环中创建它们,或者如果你正在创建大型的自动释放对象(如UIImages),这并不是什么大不了的事。在这些情况下,您应该在通过时手动释放,否则自动释放是完全可以接受的。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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