【问题标题】:return statement inside nsautoreleasepool scopensautoreleasepool 范围内的 return 语句
【发布时间】:2011-02-22 19:58:24
【问题描述】:

假设我有以下情况:

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

这样从pool block里面返回合适吗?

【问题讨论】:

    标签: objective-c return scope nsautoreleasepool


    【解决方案1】:

    简短回答:是的。

    长答案:当它嵌套的自动释放池(通常是当前线程的顶级自动释放池)被释放时,会释放没有显式释放而被放弃的池。

    顺便说一句,这是错误的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      • 2018-01-02
      • 2011-07-03
      相关资源
      最近更新 更多