Objective c nsautoreleasepool作用域内的return语句
假设我有以下场景:Objective c nsautoreleasepool作用域内的return语句,objective-c,return,scope,nsautoreleasepool,Objective C,Return,Scope,Nsautoreleasepool,假设我有以下场景: - (void)someFunction:(id)param { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSObject *objectA = [[NSObject alloc] init]; [objectA doStuff]; // Don't need to release objectA because of the pool if (!someV
- (void)someFunction:(id)param {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSObject *objectA = [[NSObject alloc] init];
[objectA doStuff]; // Don't need to release objectA because of the pool
if (!someValue) {
[pool release]; // Doubt here
return;
}
NSObject *objectB = [[NSObject alloc] init];
[objectB doStuff]; // Don't need to release objectB because of the pool
[pool release];
}
这样从池块内部返回是否正确?简短回答:是
详细回答:当释放其所在的自动释放池(通常是当前线程的顶部自动释放池)时,将释放未显式释放而被放弃的池
顺便说一句,这是错误的:
NSObject *objectA = [[NSObject alloc] init];
[objectA doStuff]; // Don't need to release objectA because of the pool
您仍然必须释放分配的对象,或者显式地:
NSObject *objectA = [[NSObject alloc] init];
[objectA doStuff];
[objectA release];
或者将它们添加到自动释放池:
NSObject *objectA = [[[NSObject alloc] init] autorelease];
[objectA doStuff];