2010-07-01 3 views
0

в разделе «Гарантия политики собственности Фонда» в статье сайта разработчика Apple на сайте Autorelease http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html#//apple_ref/doc/uid/20000047-997594 они рассказывают о продлении срока службы объекта за пределами пула автозапуска.Использование объекта за пределами контекста Autorelease

Может ли кто-нибудь дать мне ситуацию, когда эта концепция может быть использована?

ответ

1

Краткий ответ: что говорится в документации, является то, что если вам нужно сохранить объект, который был автореализован в пуле автозапуска, вам необходимо его сохранить.

Долгий ответ: Например, скажем, мне нужно выполнить определенную операцию для 1000 объектов. Как только я закончу эти объекты, я собираюсь их авторекламу. Без пула авторезистов они в конечном итоге будут выпущены, но хранение этих 1000 объектов в памяти может сделать вашу программу очень медленной (по крайней мере, до тех пор, пока они не будут автореализованы).

Чтобы решить эту проблему, я создаю пул автоопределений, который будет очищен каждые 100 объектов. Однако, что произойдет, если мне нужно сохранить последний объект последней партии? Мне еще нужно очистить остальные 99 объектов. То, что я собираюсь сделать, - отправить сообщение сохранения этому самому последнему объекту, а затем очистить пул автозапуска.

Таким образом, пул автообновлений уведомит систему о том, что он больше не хочет этих 100 предметов, но вы уже дали системе знать, что вам нужен один из них. Если объект был предыдущий сохранить счетчик 1, то он все равно будет вокруг:

1 (оригинал сохранить счета) +1 (ваш сохранить) -1 (autorelease бассейн релиз) = 1.

Эта сохраняет объект после пула авторекламы с ним.

+0

Hi Anauel, Спасибо за прекрасный ответ. – Krishnan

Смежные вопросы