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];