Обновленный ответ для измененной документации
Информация теперь распространяется по нескольким руководствам в документации. Вот список обязательного чтения:
Ответ на этот вопрос теперь полностью зависит от того, используете ли вы приложение, управляемое ARC (современный стандарт по умолчанию для новых проектов), или принудительное ручное управление памятью.
Assign vs. Weak - Используйте assign , чтобы установить указатель свойства на адрес объекта, не сохраняя его или не обрабатывая его иным образом; используйте слабый , чтобы свойство автоматически указывало на ноль, если объект, назначенный ему, освобожден. В большинстве случаев вы захотите использовать слабый , поэтому вы не пытаетесь получить доступ к освобожденному объекту (недопустимый доступ к адресу памяти - "EXC_BAD_ACCESS
"), если вы не выполняете надлежащую очистку.
Retain vs. Copy - В объявленных свойствах по умолчанию используется retain (так что вы можете просто полностью его опустить), и он будет управлять счетчиком ссылок объекта автоматически, если другой объект назначен свойство или оно установлено в ноль; Используйте copy для автоматической отправки вновь назначенному объекту сообщения -copy
(которое создаст копию переданного объекта и назначит эту копию вместо свойства - полезно (даже требуется) в некоторых ситуациях, когда назначенный объект может быть изменен после установки в качестве свойства какого-либо другого объекта (что будет означать, что изменение / мутация также будет применяться к этому свойству).