Є два нові атрибути управління пам'яттю для властивостей, введених ARC, strong
та weak
.
Крім того copy
, що, очевидно, щось зовсім інше, чи є якісь відмінності між strong
vs retain
і weak
vs 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
це достовірний атрибут, дивіться у програмі Apple "Програмування з об'єктивом-C" у розділі "Інкапсуляція даних" у підзаголовку "Використовуйте небезпечні незаповнені посилання для деяких класів". Що говорить: "Для властивості це означає використання атрибута unsafe_unretain:"
strong
,weak
таunsafe_unretained
.