в NSString свойство типа NSNumber, что лучше: сохранить или скопировать? (а как насчет NSArray?) - PullRequest
3 голосов
/ 05 июля 2011

, если объект имеет свойство типа NSString или NSNumber, что лучше, retain или copy?

Я думаю, что эти объекты неизменны (не могут изменить состояние объекта), так что копирование лучше?

Я вижу пример, почему лучше копировать, если назначить NSMutableString и изменить его, но NSMutableNumber нет. Тогда в случае NSNumber, я бы лучше использовал retain до NSNumber объектов?

Если copy лучше, потому что NSString и NSNumber имеют малое использование памяти, как насчет того, если свойство имеет тип NSArray?

Тип

NSArray также является неизменяемым, как насчет использования copy в свойствах NSArray?

Ответы [ 2 ]

6 голосов
/ 05 июля 2011

С неизменяемыми объектами скопируйте.

Для неизменных объектов, таких как большинство строк NSSt, -copyWithZone: эффективно

-(id) copyWithZone: (NSZone*) zone
{
    return [self retain];
}

, поэтому накладные расходы минимальны.

С изменяемымОбъекты, возможно, копируемые, но с большими изменяемыми объектами, такими как строки и большие изменяемые массивы, вам нужно сделать суждение, основанное на профилировании вашего кода.Также, конечно, с изменяемыми объектами вы можете хотеть оригинал, потому что вы можете захотеть увидеть изменения в оригинале.

0 голосов
/ 05 июля 2011

Почему вы можете быть заинтересованы в копировании неизменяемого объекта?На самом деле неизменяемые классы могут просто возвращать [self retain] внутри метода copy.Что я обычно делаю:

  • Назначение для выходов пользовательского интерфейса и в некоторых других конкретных ссылках, где важно избегать сохранения цикла
  • Просто сохранения неизменяемые объекты
  • Копирование простой изменяемый объект
  • Глубокая копия для типов контейнеров (изменяемые массивы, словари и т. д.)

Конечно, приведенные выше правила не являются абсолютными, но в целом они работают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...