Просто мне пришло в голову ... Я считаю, что жизнь слабой ссылки привязан к области действия этой ссылки (внутри функции или глобальной).
Поэтому мне интересно, пока я сохраняю обработку данных в пределах определенной области, тогда я должен быть в порядке с использованием ссылок слабый vs сильныйсильный>. Верный?
Причина, по которой я спрашиваю ... мне сказали, что в одной организации есть политика сохранения блоков / закрытий «слабыми» по умолчанию, чтобы избежать случайных циклов сохранения.
Для обоих языков. Это просто абстрактный вопрос. Имеет смысл; обычно я бы так и поступил. Выполнено.
В ObjC ссылки weak
действительны только до тех пор, пока объект остается жизнеспособным. Это может быть до конца области, а может и нет. Если вы выполните weakVar = [[NSObject alloc] init];
, объект будет немедленно освобожден, и компилятор, например, предупредит.
Таким образом, слабая ссылка может быть освобождена в любое время, если системе потребуется запросить хранилище; и, следовательно, использование сильной ссылки.
one organization has a policy of keeping blocks/closure 'weak' by default to avoid accidental retain cycles.
Вероятно, в организации существует политика сохранения ссылки, захваченные блоками «слабым», чтобы избежать циклов сохранения. Сами блоки, сохраненные как свойства, копируются.
Есть очень специфическая ситуация, когда блок вызывает цикл сохранения: блок ссылается на объект (себя или какой-либо другой объект), и этот объект (прямо или косвенно) сохраняет блок.
В большинстве случаев мы знаем через исследование, какой объект будет удерживать блок. Скажите, что это «objectA». Вопрос цикла сохранения: сохраняет ли какой-либо из объектов, упомянутых в блоке, прямо или косвенно «objectA»? Эти объекты, и никто другой, должны быть объявлены слабыми для использования в блоке.
Объявление их всех слабыми все время сделает свою работу, но, IMO, заставит будущих читателей этого кода беспокоиться о том, что авторы не имеют твердого понимания своего собственного кода.
Это вопрос Swift или Objective-C, и если вы пытаетесь выделить все заглавные слова, есть лучшие способы, такие как курсив или жирный, см. stackoverflow.com/help/formatting