NSAutoreleasePool.Когда уместно создать новый пул автоматического выпуска? - PullRequest
5 голосов
/ 07 марта 2011

В iOS / CocoaTouch я часто вижу код, который создает новый экземпляр NSAutoreleasePool в методе.Недавно я видел один в NSOperation.

Каковы основные правила для установки нового экземпляра NSAutoreleasePool?Почему это лучше, чем просто полагаться на уже существующий пул релизов, созданный в main.m?

Спасибо,
Doug

Ответы [ 3 ]

6 голосов
/ 07 марта 2011

Вы можете использовать новый пул автоматического выпуска в любое время, но это не всегда полезно. Это требуется всякий раз, когда вы запускаете новый поток, или объекты, автоматически выпущенные в этом потоке, будут пропущены. Также распространено создание новых пулов автоматического выпуска в методе, где вы создаете и автоматически выпускаете большое количество объектов. Например, если у вас был цикл, который создавал 10 объектов в каждой из 50 итераций, вам следует рассмотреть возможность создания пула автоматического выпуска для этого метода, если он не является частью цикла, так что для каждой итерации создается новый.

3 голосов
/ 07 марта 2011

Создайте свой собственный пул, когда его еще нет (например, в новом потоке), или когда недостаточно одного в цикле выполнения (создание автоматически выпущенных объектов в цикле, который будет выполняться в течение многих итераций) или когда вы хотите повысить контроль над окончательным освобождением созданных вами автоматически выпущенных объектов.

1 голос
/ 12 сентября 2012

Я тестировал в iOS 4.3, и вам нужно создать собственный пул автоматического выпуска при выполнении executeSelectorInBackground. Вам не нужно создавать при использовании NSOperation или dispatch_async.

Похоже, в iOS> = 5.0 система автоматически создает пул автоматического выпуска, даже если используется executeSelectorInBackground, поэтому мне не удалось найти случай, когда вам нужно создать собственный пул автоматического выпуска.

Не удалось найти документально подтвержденное изменение.

...