2012-05-08 5 views

ответ

4

Что предотвращает выпуск автореализованного экземпляра NSArray , прежде чем он будет использован в методе, к которому он возвращается?

Пулы автореферата на нить. То есть, автореализованный объект является, фактически, задержанным вызовом release, который происходит по каждому потоку.

Таким образом, если нет звонка на номер drain между вызывающим абонентом и вызываемым абонентом, невозможно освободить автореализованный объект из-за утечки пула (за исключением серьезной глупости резьбы).

В общем, бассейны отсасывают очень хорошо указано время, как сказал Кевин:

• цикл запуска будет осушить бассейн в нижней части каждого прохода через петлю

• посланной блоки через НОД будет выполняться в контексте пула, который будет истощаться «время от времени» (подробности реализации). NSOperationQueue ведет себя аналогично

• другие потоки несут ответственность за делаю это сами

Таким образом, в вашем простом примере выполнение коды вполне линейно и, осмотр, там не может быть утечки в этом потоке выполнения между возврат и использование в вызывающем абоненте.

(Обратите внимание, что это также одна из причин, почему retainCount бесполезно, он ни счетов за любые «отсроченное высвобождение» вызовов, вызванных autorelease и не количественно-либо за нить сохраняет В действительности, вы должны думать о сохраняет./выпускает как полностью сквозную нить, если вы сохраняете объект в потоке, вы должны отпустить его в том же потоке , если вы явно не передаете право собственности от одной нити на другую.)

2

Пул автореферации сливается во время итерации цикла событий. Поскольку это утечка, которая вызывает отправку сообщений о выпуске на автореализованные объекты, они все еще действительны в вызывающем методе.

+1

Nope; пулы авторефератов могут быть истощены значительно более или менее часто, чем каждый проход через цикл событий ... – bbum

+0

Учитывая контекст вопроса, не особо интересный вопрос. –

+1

Вот почему я не спустил вниз; в то время как он объясняет вопрос OP, он также оставляет ОП с потенциалом уйти со значительно неправильным восприятием того, как работают пулы. – bbum

4

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