Цель C-Назначение, Копирование, Сохранение


Я новичок в Objective C. У меня есть базовые знания в C, включая концепцию указателей. У меня есть два основных вопроса:

  1. может ли кто-нибудь объяснить разницу между назначением,копированием и сохранением с некоторой аналогией?
  2. как вы обрабатываете функцию, которая возвращает переменную указателя, и как вы выполняете обмен сообщениями через указатель возврата?
4 75

4 ответа:

обновленный ответ для измененной документации

информация теперь распространяется по нескольким руководствам в документации. Вот список необходимого чтения:

ответ на этот вопрос теперь полностью зависит от того, используете ли вы приложение, управляемое 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"
)
  1. назначение

    • assign-это атрибут свойства по умолчанию
    • assign-это атрибут свойства, который сообщает компилятору, как синтезировать реализацию setter свойства
  2. копия:

    • копирование требуется, когда объект является изменяемым
    • copy возвращает объект, который вы должны явно освободить (например, в dealloc) в средах, не связанных с мусором
    • вам нужно отпустите объект, когда закончите с ним, потому что вы сохраняете копию
  3. сохранить:

    • указывает, что новое значение должно быть отправлено "- сохранить "при назначении, а старое значение отправлено" - release"
    • Если вы пишете сохранить это будет автоматически работать как сильный
    • методы, такие как "запас" включает неявное "сохранить"