Objective c 强制释放自动释放对象

Objective c 强制释放自动释放对象,objective-c,memory-leaks,Objective C,Memory Leaks,我可以通过调用没有自动释放池的释放来强制自动释放对象吗 NSString *myString = [[[NSString alloc] init] autorelease]; [myString release]; NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *myString = [[[NSString alloc] init] autorelease]; [pool release]; NSSt

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

NSString *myString = [[[NSString alloc] init] autorelease];
[myString release];
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *myString = [[[NSString alloc] init] autorelease];
[pool release];
NSString *myString = [[[NSString alloc] init] autorelease];
[myString release];
通常是这样的:

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

第一个示例将崩溃,因为字符串将被释放。如果您想控制自动释放对象的生存期,正确的方法是您的第二个示例所做的操作–创建一个本地自动释放池,您可以在需要时释放该池。

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

您可以执行以下操作:

NSString *myString = [[[NSString alloc] init] autorelease];
或者这个:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *myString = [[[NSString alloc] init] autorelease];
[pool release];
但不是这个: