Управление потоками в ObjC и не пустые функции - PullRequest
1 голос
/ 25 мая 2011

Хорошо, мой вопрос - это то, что я давно искал.Скажем, метод «первый» был отсоединен как новый поток.</p> <pre><code>-(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 Ответ

2 голосов
/ 25 мая 2011

Нет необходимости иметь второй пул автоматического выпуска в методе getArray.

Если по какой-то причине вы хотите иметь ARP в методе getArray, вы, вероятно, реализуете его следующим образом:

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

Технически можете оставляют пул не слившимся, и он будет сливаться автоматически, когда «верхний» пул сливается , но IMO это признак какого-то действительно плохо спроектированного кода.

...