ObjC线程和非void函数内存管理

时间:2011-05-25 06:16:17

标签: iphone objective-c macos nsthread

好的,所以我的问题是我一直在寻找的东西。假设方法“first”已作为新线程分离。

-(void)first{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int a;
    NSMutableArray *array = [self getArray];
    [pool drain];
}

-(NSMutableArray *)getArray{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSMutableArray *ar = [NSMutableArray array];
    [ar addObject:[NSString stringWithString:@"Hello"]];
    return ar;
    [pool drain];
}

-(void)first{ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; int a; NSMutableArray *array = [self getArray]; [pool drain]; } -(NSMutableArray *)getArray{ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSMutableArray *ar = [NSMutableArray array]; [ar addObject:[NSString stringWithString:@"Hello"]]; return ar; [pool drain]; } 我的问题是,如果我在返回对象后排空池,池不会被耗尽,并且它被泄漏,但是如果我在返回数组之前将其耗尽我无法释放阵列,因为显然它将需要...

这可能是非常明显的事情,我只是想念,但我真的很困惑。提前谢谢。

1 个答案:

答案 0 :(得分:2)

没有必要在getArray方法中使用第二个自动释放池。

如果出于某种原因,你想在getArray方法中使用ARP,你可能会像这样实现它:

- (NSMutableArray *)getArray {
  NSMutableArray *ar = [NSMutableArray array];
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  //do stuff
  [pool drain];
  return ar;
}

从技术上讲, 可以让游泳池畅通无阻,it will get drained automatically when a "higher" pool gets drained,但IMO是一些设计非常糟糕的代码的标志。