Какая разница между отправкой -релиз или утечка в Autorelease пул?

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

3 ответов


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

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


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

Если у вас нет GC, то drain = release


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

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