Є два нові атрибути управління пам'яттю для властивостей, введених ARC, strongта weak.
Крім того copy, що, очевидно, щось зовсім інше, чи є якісь відмінності між strongvs retainі weakvs 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.