Что предотвращает выпуск автореализованного экземпляра NSArray , прежде чем он будет использован в методе, к которому он возвращается?
Пулы автореферата на нить. То есть, автореализованный объект является, фактически, задержанным вызовом release
, который происходит по каждому потоку.
Таким образом, если нет звонка на номер drain
между вызывающим абонентом и вызываемым абонентом, невозможно освободить автореализованный объект из-за утечки пула (за исключением серьезной глупости резьбы).
В общем, бассейны отсасывают очень хорошо указано время, как сказал Кевин:
• цикл запуска будет осушить бассейн в нижней части каждого прохода через петлю
• посланной блоки через НОД будет выполняться в контексте пула, который будет истощаться «время от времени» (подробности реализации). NSOperationQueue ведет себя аналогично
• другие потоки несут ответственность за делаю это сами
Таким образом, в вашем простом примере выполнение коды вполне линейно и, осмотр, там не может быть утечки в этом потоке выполнения между возврат и использование в вызывающем абоненте.
(Обратите внимание, что это также одна из причин, почему retainCount
бесполезно, он ни счетов за любые «отсроченное высвобождение» вызовов, вызванных autorelease
и не количественно-либо за нить сохраняет В действительности, вы должны думать о сохраняет./выпускает как полностью сквозную нить, если вы сохраняете объект в потоке, вы должны отпустить его в том же потоке , если вы явно не передаете право собственности от одной нити на другую.)
Nope; пулы авторефератов могут быть истощены значительно более или менее часто, чем каждый проход через цикл событий ... – bbum
Учитывая контекст вопроса, не особо интересный вопрос. –
Вот почему я не спустил вниз; в то время как он объясняет вопрос OP, он также оставляет ОП с потенциалом уйти со значительно неправильным восприятием того, как работают пулы. – bbum