Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

Оксиген прав, см. документацию по методу drain NSAutoreleasePool:

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