强制释放自动释放对象

时间:2012-06-04 09:04:19

标签: objective-c memory-leaks

我是否可以通过调用没有自动释放池的版本来强制Autorelase对象:

NSString *myString = [[[NSString alloc] init] autorelease];
[myString release];

通常情况就是这样:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *myString = [[[NSString alloc] init] autorelease];
[pool release];

3 个答案:

答案 0 :(得分:3)

第一个样本将崩溃,因为字符串将被过度释放。如果您想要控制自动释放对象的生命周期,那么正确的方法就是您的第二个示例 - 创建一个您可以随时消耗的本地自动释放池。

答案 1 :(得分:1)

您的代码将崩溃,因为全局自动释放池将尝试稍后释放该对象。结果在malloc双重自由错误

答案 2 :(得分:1)

你可以这样做:

NSString *myString = [[[NSString alloc] init] autorelease];

或者这个:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *myString = [[[NSString alloc] init] autorelease];
[pool release];

但不是这样:

NSString *myString = [[[NSString alloc] init] autorelease];
[myString release];