开发者

ObjC threading and non-void functions memory management

开发者 https://www.devze.com 2023-03-08 01:07 出处:网络
Ok, so my question is something I have been looking for for a while. Say the method \"first\" has been detached as a new thread.

Ok, so my question is something I have been looking for for a while. Say the method "first" has been detached as a new thread.

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

-(NSMutableArray *)getArray{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] i开发者_开发百科nit];
    NSMutableArray *ar = [NSMutableArray array];
    [ar addObject:[NSString stringWithString:@"Hello"]];
    return ar;
    [pool drain];
}

My issue is that if i drain the pool after the object is returned, the pool doesnt get drained, and its leaked, however if i drain it before i return the array i cannot release the array because obviously its going to be needed...

This may be something thats really obvious, and i'm just missing but i am really confused. Thanks in advance.


It is unnecessary to have a second autorelease pool in the getArray method.

If, for some reason, you wanted to have an ARP in the getArray method, you'd probably implement it like this:

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

You technically can leave the pool un-drained, and it will get drained automatically when a "higher" pool gets drained, but IMO that's a sign of some really poorly designed code.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号