2

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

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

通常是这样的:

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

3 回答 3

3

第一个示例会崩溃,因为字符串会过度释放。如果您想控制自动释放对象的生命周期,正确的方法是您的第二个示例所做的 - 创建一个本地自动释放池,您可以在需要时将其耗尽。

于 2012-06-04T09:07:26.260 回答
1

您的代码将崩溃,因为全局自动释放池稍后会尝试释放该对象。导致 malloc double free 错误

于 2012-06-04T09:07:38.227 回答
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];
于 2012-06-04T09:08:25.947 回答