我有一个简单的问题。当保留计数很高时自动释放是否有效?
例如...如果我在视图控制器中并执行以下操作:
[self retain];
[self retain];
[self retain];
[self retain];
[self autorelease];
如果我弹出视图,它会被释放吗?
谢谢。
我有一个简单的问题。当保留计数很高时自动释放是否有效?
例如...如果我在视图控制器中并执行以下操作:
[self retain];
[self retain];
[self retain];
[self retain];
[self autorelease];
如果我弹出视图,它会被释放吗?
谢谢。
自动释放只是将对象添加到自动释放池中。当自动释放池被释放时,释放消息会发送到对象以及该池中的所有其他对象。如果您的保留计数仍然大于零并且您没有进一步释放,那么您将有内存泄漏。
我相信,如果您按照上面所说的那样做,您的保留计数将为 5(分配中的一个,上面的四个保留中的 4)。您将对象添加到自动释放队列中,以便稍后它将接收释放并将保留计数减少一。最后弹出视图应该再减少一个。这将使保留计数为 3。所以我认为您会有内存泄漏。
但是,如果您使用的是 iOS 5,最新的编译器使用 ARC(自动引用计数),您无需担心这个问题。大多数情况下都很好。
已编辑:从自动释放池中向对象发送释放时已更正。请参阅: 高级内存管理 抱歉信息有误。