В чем разница между отправкой -release или -drain в пул Autorelease? - PullRequest
19 голосов
/ 28 апреля 2009

Во многих книгах и на многих сайтах я вижу -дренаж. Ну, для Авто-релиза, который звучит круто. Но это делает что-нибудь кроме выпуска? Я бы предположил, что -поток просто заставляет Пул выпускать все свои объекты, не выпуская сам Пул. Просто предположение.

Ответы [ 3 ]

25 голосов
/ 28 апреля 2009

Обратите внимание, что комментарии к ответу oxigen о том, что -drain не выпускает NSAutoreleasePool, не верны. В документации для NSAutoreleasePool четко сказано, что -drain высвобождает (и, следовательно, уничтожает) NSAutoreleasePool.

-drain является заменой для использования -release для объектов NSAutoreleasePool, единственное отличие состоит в том, что он дает подсказку системе сбора мусора.

10 голосов
/ 28 апреля 2009

Oxigen прав, см. Документацию для метода drain из NSAutoreleasePool :

В среде с подсчетом ссылок отпускает и выдает ресивер; в сборка мусора, запускает сборку мусора, если память, выделенная с последнего коллекция больше текущей порог.

10 голосов
/ 28 апреля 2009

Если в вашей системе есть сборщик мусора, то -drain отправить сообщение (objc_collect_if_needed) для GC

Если у вас нет GC, тогда слив = выпуск

...