目标c自动释放问题

时间:2011-05-19 15:30:03

标签: objective-c memory-management

嘿,我有一个快速的自动回复问题。我基本上理解它是如何工作的,但我想知道以下是否会造成内存泄漏。

NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

NSString* string = [[[NSString alloc] init] autorelease];
[[string retain] autorelease];

[pool drain];

字符串是否会发送两条释放消息?

2 个答案:

答案 0 :(得分:6)

将您与对象的保留计数的交互完全视为delta。

如果将其增加1,则需要将其减1,以便可能释放该对象。

所以 - 是的 - 你将它增加了两倍并在该代码中将其减少了两倍。结果将是两个关于排水的版本。

答案 1 :(得分:2)

这不会造成内存泄漏而且你是正确的,它将从自动发布池发送两个释放消息。只要您为每个alloc / retain / copy都有一个release / autorelease,就不应该有任何泄漏。