Создание автоматически выпущенных объектов в отдельных потоках с NSOperationQueue - PullRequest
1 голос
/ 03 февраля 2011

Это общий вопрос об автоматическом выпуске, потоках какао и NSOperationQueue.

Я использую NSOperationQueue для выполнения определенных вызовов API, анализа результата и возврата его в основной поток.NSOperationQueue выполняет эти операции в новых потоках.Если я правильно понимаю каждый раз, когда запускается новый поток, вокруг этого потока создается пул автоматического автоматического выпуска, который освобождается по завершении потока.

Вот случай, который доставляет мне неприятности.Я передаю выделенный NSArray NSOperationQueue.Во время операции массив заполняется группой автоматически выпущенных объектов, которые создаются.Затем массив возвращается обратно в основной поток.

  1. Поскольку в потоке были созданы автоматически выпущенные объекты, будут ли они освобождены?Как я понимаю, они не должны этого делать, поскольку их количество ссылок равно 1, после того как они были добавлены в NSArray.

  2. Кто теперь владеет выпуском этих объектов?Неужели автоматическое освобождение магическим образом передало ответственность пулу автоматического выпуска основного потока.

  3. Было бы что-то другое, если бы я сам создавал потоки, а не использовал NSOperationQueue?

Спасибо!

1 Ответ

0 голосов
/ 03 февраля 2011

NSOperation s нужно создать NSAutoReleasePool для них.

-(void)main
{
   NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];

   //All NSOperation code here

   [pool drain];
}
  1. Нет, вы, вероятно, получите предупреждение в консоли о том, что пул автоматических выпусков не существует. Добавление их в массив увеличит число ссылок на 1, правда, но без NSAutoReleasePool число ссылок было бы слишком высоким для правильного управления памятью.
  2. Вы несете ответственность за создание пула автоматического выпуска для этого потока и его слив. Они волшебным образом не помещаются в пул основного потока, если ваша операция не выполняется в основном потоке.
  3. Нет каждого потока, отвечающего за создание пула автоматического выпуска.
...