У меня есть общее представление о том, как работает пул NSAutorelease.у нас есть объекты, которые автоматически высвобождаются и когда вызывается метод стока.в пуле проверяются объекты с retaincount равным +1, и поэтому они освобождаются.
, но я не уверен в том, что это так.Мы создаем объект пула NSAutoRelease в основном потоке, а также по одному для каждого потока.Как поток связан с этим конкретным пулом.Что произойдет, если мы создадим два или более пула автоматического выпуска в одном потоке.
мы просто создадим объект пула и опустошим его, когда наша работа будет завершена.это не так, что мы получаем синглтон или что-то в этом роде.
Тогда как поток попадает в этот конкретный пул?
Объяснение сценария того, что я подразумеваю под сохранением счетчика 1.[немного неверно, прочитайте правку]
- Obj A имеет метод createAndReturn.
- createAndReturn создает объект autorel_obj и возвращает его.
Теперь он не может просто выпустить его, так как должен его вернуть.Таким образом, он будет автоматически освобожден и вернется.
Таким образом, autorel_obj будет в пуле автоматического выпуска.Теперь скажите, что objB вызывает createAndReturn из ObjA.
, получает autorel_obj и сохраняет его, в противном случае пул autorelease его истощит.Теперь, когда он сохраняется объектом objB, его счетчик хранения равен 2.
[ Здесь исправлена неправильная часть, EDIT ]
Автозапуск пула просто не можетвыпускать autorel_obj до тех пор, пока он не будет также использован objB.вот почему, пока objB также не выпустит его и его счетчик хранения не станет равным «1», он не может быть освобожден.
, так что под retainCount 1 я имею в виду, что объект, отправивший его в пул, является единственным владельцем.Это.
и относительно связи с пулом и потоком, был полезен ответ Firoze Lafeer.
РЕДАКТИРОВАТЬ, чтобы сохранить сценарий счетчика 1: Как правильно указал Firoze, Мое более раннее объяснение сохранениясчетчик 1 нуждается в изменении.
autorel_obj будет освобожден только при опустошении пула, и, следовательно, его счетчик сохранится на 1. Он не будет освобожден из памяти.Как только каждый второй владелец obj из autorel_obj освобождает его, и его счетчик хранения становится равным 0. Тогда только он освобождается из памяти.
Извините за все проблемы, Спасибо Firoze за исправление.