Объект с 2 владельцами - PullRequest
0 голосов
/ 27 января 2012

Я читал документацию Apple по основным правилам управления памятью.Я натолкнулся на предложение: «У любого объекта может быть один или несколько владельцев».

Что это значит?У объекта 2 владельца.Я не очень знаком с концепциями ООП.

Ответы [ 2 ]

3 голосов
/ 27 января 2012

В управлении памятью, если объект владеет ссылкой на другой объект, он сохраняет его.

Несколько объектов могут сохранить объект, и когда на объекте нет удержаний, никто не владеет им, и он исчезает.Сохранение увеличивает счетчик ссылок, а релиз уменьшает его.

Хорошая аналогия - добавление поводка к питомцу.Несколько людей могут добавить привязь, но если ни у кого нет привязи, она может уйти:)

Если вы собираетесь использовать ссылку на объект вне непосредственной функции, которую вы получаете ссылкутогда вы должны сохранить его.Если вы вызываете alloc, copy, mutableCopy для получения ссылки, вы просто сохраняете ее.Если вы получаете его по другому имени сообщения, стандартным является его автоматическое освобождение (что вполне нормально), и оно исчезнет в ближайшем будущем за пределами этой функции.

2 голосов
/ 27 января 2012

Под «владеет» они подразумевают «содержит ссылку на». Управление памятью iOS явно, это делается путем подсчета ссылок. Сообщение «сохранить», отправленное объекту, увеличивает счетчик ссылок, а сообщение «выпуск» уменьшает счетчик ссылок. Когда счетчик ссылок достигает 0, объект освобождается (и сначала отправляется сообщение "dealloc"). Это относится к объектам в иерархии NSObject.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...