好的,所以我的问题是我一直在寻找的东西。假设方法“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];
}
我的问题是,如果我在返回对象后排空池,池不会被耗尽,并且它被泄漏,但是如果我在返回数组之前将其耗尽我无法释放阵列,因为显然它将需要...
这可能是非常明显的事情,我只是想念,但我真的很困惑。提前谢谢。
答案 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是一些设计非常糟糕的代码的标志。