使用autorelease并保留

时间:2012-07-13 19:33:08

标签: ios5 memory-management retain autorelease nsautoreleasepool

我有一个简单的问题。自动释放是否在保留计数很高时起作用?

例如...如果我在视图控制器中并执行以下操作:

[self retain];
[self retain];
[self retain];
[self retain];
[self autorelease];

如果我弹出视图,它会被释放吗?

感谢。

1 个答案:

答案 0 :(得分:0)

Autorelease只是将对象添加到自动释放池中。释放自动释放池时,会向该对象以及该池中的所有其他对象发送释放消息。如果您的保留计数仍然大于零并且您没有进一步释放,那么您将有内存泄漏。

我相信,如果按照上面的说法进行操作,您的保留计数为5(来自alloc的一个,以及上面四个保留中的4个)。您将对象添加到自动释放队列,以便稍后它将收到一个版本并将保留计数减少一个。最后弹出视图应该再减少一个。这会留下3的保留计数。所以我认为你会有内存泄漏。

但是,如果您使用的是iOS 5,则最新的编译器使用ARC(自动引用计数),您不必担心此问题。好吧,大部分都是。

已编辑:更正了从自动释放池发送对象的时间。看到: Advanced Memory Management抱歉提供错误信息。