Есть два новых атрибута управления памятью для свойств, представленных ARC, strongи weak.
Кроме того copy, что, очевидно, является чем-то совершенно другим, есть ли различия между strongпротив retainи weakпротив assign?
Насколько я понимаю, единственное отличие здесь в том, что он weakбудет назначать nilуказатель, а assignне будет, что означает, что программа завершится сбоем, когда я отправлю сообщение указателю после его освобождения. Но если я воспользуюсь weak, этого никогда не произойдет, потому что отправка сообщения nilне будет ничего делать.
Я не знаю никаких различий между strongи retain.
Есть ли какая-то причина, по которой я должен использовать assignи retainв новых проектах, или они устарели?
weakа strong) и 4 переменных отборочных прижизненной ( __strong, __weak, __unsafe_unretained, __autoreleasing). Смотрите примечания ARC ниже.
assignпри компиляции с ARC было ошибкой. Есть много удаленных ответов об этом. Похоже, что было изменено до финального релиза. unsafe_unretainedявляется предпочтительным атрибутом для многих из нас ранних последователей. Для доказательства того, что unsafe_unretainedэтот атрибут является действительным, обратитесь к разделу «Программирование с помощью Objective-C» компании Apple в разделе «Инкапсуляция данных» в подзаголовке «Использовать небезопасные нераспределенные ссылки для некоторых классов». Что говорит: «Для свойства это означает использование атрибута unsafe_unretained:»
strong,weakиunsafe_unretained.