NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSString* string = [[[NSString alloc] init] autorelease];
[[string retain] autorelease];
[pool drain];
字符串是否会发送两条释放消息?
答案 0 :(得分:6)
将您与对象的保留计数的交互完全视为delta。
如果将其增加1,则需要将其减1,以便可能释放该对象。
所以 - 是的 - 你将它增加了两倍并在该代码中将其减少了两倍。结果将是两个关于排水的版本。
答案 1 :(得分:2)
这不会造成内存泄漏而且你是正确的,它将从自动发布池发送两个释放消息。只要您为每个alloc / retain / copy都有一个release / autorelease,就不应该有任何泄漏。