我是否可以通过调用没有自动释放池的版本来强制Autorelase对象:
NSString *myString = [[[NSString alloc] init] autorelease];
[myString release];
通常情况就是这样:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *myString = [[[NSString alloc] init] autorelease];
[pool release];
答案 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];