Как стать автором
Обновить

Комментарии 7

Не хватает информации про метод autorelease для полноты картины

Решение банальное — сделать одну из ссылок слабой.

Пример:
Есть объект организация и объект счет. У организации есть ссылки на счета. У счета есть ссылка на организацию.
Есть апи, где можно получить список организаций и это апи используется в бизнес логике, которая ходит по организациям и смотрит счета а потом заглядывает в организацию счета.
Есть апи, где можно получить список счетов, и бизнес логика, которая ходит по счетам, ну и использует еще и организацию из счета а потом ходит и по счетам организации.
Внимание вопрос: Какую ссылку — в организации или в счете — сделать слабой?
ЗЫ: А теперь представьте не два объекта а нехиленную иерархию с кучей ссылок…
Для таких целей можно использовать не «weak», а «unowned»
Не будет опционалов (что удобнее), но нужно будет быть уверенным, что на другом конце всегда есть что-то
Подробнее тут

В данном примере предложил бы использовать структуры, а не классы.
На памяти скажется незначительно (см. copy-on-write), но при этом не нужно будет думать, кто кого держит.
Другой вариант — не пытаться вложить свойства друг в друга, а сделать отдельную прослойку для удобной работы с этим отношением.

Только следует помнить, что copy-on-write работает только для «стандартных» структур, таких как массивы и строки и тд.

Для полноты картины не хватает пары ссылок:
* Memory Management Programming Guide — покрывает все аспекты, в том числе и autorelease pools.
* Clang — Objective-C Automatic Reference Counting — Спецификация работы ARC.
* Swift — Automatic Reference Counting — Документация с объяснениями для Swift.

В принципе, в современном мире знание в деталях этих механизмов не особо необходимо. Достаточно простых правил, описанных в статье. Но если хотя бы раз это прочитать и понять общие механизмы — то потом становиться проще разбираться в хитрых случаях. Как минимум понимание когда нужно использовать autorelease pools хорошо помогает в местах с высоким потреблением памяти.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.