Есть два новых атрибута управления памятью для свойств, представленных 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
.