Цель C-Назначение, Копирование, Сохранение
Я новичок в Objective C. У меня есть базовые знания в C, включая концепцию указателей. У меня есть два основных вопроса:
- может ли кто-нибудь объяснить разницу между назначением,копированием и сохранением с некоторой аналогией?
- как вы обрабатываете функцию, которая возвращает переменную указателя, и как вы выполняете обмен сообщениями через указатель возврата?
4 ответа:
обновленный ответ для измененной документации
информация теперь распространяется по нескольким руководствам в документации. Вот список необходимого чтения:
- основные компетенции какао: объявленная собственность
- Программирование с целью-C: инкапсуляция данных
- переход к заметкам о выпуске ARC
- Расширенное Программирование Управления Памятью Руководство
- Objective-C Runtime Programming Guide: Объявленные Свойства
ответ на этот вопрос теперь полностью зависит от того, используете ли вы приложение, управляемое ARC (современное значение по умолчанию для новых проектов), или принудительное ручное управление памятью.
назначить и слабых - используйте назначение чтобы установить указатель свойства на адрес объекта без его сохранения или иного кураторства; используйте слабый чтобы свойство автоматически указывало на ноль, если назначенный ему объект освобожден. В большинстве случаев вы хотите использовать слабый таким образом, вы не пытаетесь получить доступ к освобожденному объекту (незаконный доступ к адресу памяти - "
EXC_BAD_ACCESS
"), Если вы не выполняете правильную очистку.сохранить и скопировать - заявленные свойства использовать сохранить по умолчанию (так что вы можете просто опустить его совсем) и ссылку на объект автоматически подсчитайте, присвоен ли свойству другой объект или ему присвоено значение nil; используйте скопировать для автоматической отправки вновь назначенного объекта a
-copy
сообщение (которое создаст копию переданного объекта и назначит эту копию свойству вместо этого-полезно (даже обязательно) в некоторых ситуациях, когда назначенный объект может быть изменен после установки в качестве свойства какого-либо другого объекта (что означало бы, что модификация / мутация будет применяться к свойству как ну.)
The Руководство По Программированию Управления Памятью из справочной библиотеки iOS есть основы назначения, копирования и сохранения с аналогиями и примерами.
скопировать Создает копию объекта и возвращает его с сохранить количеством 1. Если вы копируете объект, вы являетесь владельцем копии. Это относится к любому методу, содержащему слово copy, где "copy" относится к возвращаемому объекту.
сохранить увеличивает сохраняют количество объектов на 1. Ответственность объект.
релиз уменьшает количество сохраняемых объектов на 1. Отказывается собственности на объект.
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" )
назначение
- assign-это атрибут свойства по умолчанию
- assign-это атрибут свойства, который сообщает компилятору, как синтезировать реализацию setter свойства
копия:
- копирование требуется, когда объект является изменяемым
- copy возвращает объект, который вы должны явно освободить (например, в dealloc) в средах, не связанных с мусором
- вам нужно отпустите объект, когда закончите с ним, потому что вы сохраняете копию
сохранить:
- указывает, что новое значение должно быть отправлено "- сохранить "при назначении, а старое значение отправлено" - release"
- Если вы пишете сохранить это будет автоматически работать как сильный
- методы, такие как "запас" включает неявное "сохранить"