Обновленный ответ на измененную документацию
Информация теперь распределена по нескольким руководствам в документации. Вот список обязательной литературы:
Ответ на этот вопрос теперь полностью зависит от того, используете ли вы приложение, управляемое ARC (современный стандарт по умолчанию для новых проектов), или принудительно управляете памятью вручную.
Assign vs.Weak - используйте assign, чтобы установить указатель свойства на адрес объекта, не сохраняя его или иным образом не курируя; используйте weak, чтобы свойство указывало на nil автоматически, если назначенный ему объект освобожден. В большинстве случаев вы захотите использовать weak, чтобы не пытаться получить доступ к освобожденному объекту (незаконный доступ к адресу памяти - " EXC_BAD_ACCESS
"), если вы не выполните надлежащую очистку.
Сохранение или копирование - объявленные свойства по умолчанию используют сохранение (так что вы можете просто опустить его вообще) и автоматически управляют счетчиком ссылок на объект независимо от того, назначен ли другой объект свойству или для него установлено значение nil; Используйте копию для автоматической отправки вновь назначенному объекту -copy
сообщения (которое создаст копию переданного объекта и вместо этого назначит эту копию свойству - полезно (даже требуется) в некоторых ситуациях, когда назначенный объект может быть изменен после того, как он будет установлен как свойство некоторого другого объекта (что будет означать, что модификация / мутация будет применяться и к этому свойству).
Программирование Управления памяти Руководство по IOS справочной библиотеки имеет основу переуступать, копировать и сохранять аналогии и примерами.
источник
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"First",@"Second", nil]; NSMutableArray *copiedArray = [array mutableCopy]; NSMutableArray *retainedArray = [array retain]; [retainedArray addObject:@"Retained Third"]; [copiedArray addObject:@"Copied Third"]; NSLog(@"array = %@",array); NSLog(@"Retained Array = %@",retainedArray); NSLog(@"Copied Array = %@",copiedArray); array = ( First, Second, "Retained Third" ) Retained Array = ( First, Second, "Retained Third" ) Copied Array = ( First, Second, "Copied Third" )
источник
назначать
копия:
сохранить:
источник