В соответствии с этим: Свойство NSString: скопировать или сохранить?
Для NSString/NSMutableString рекомендуется копировать.
Как насчет NSArray/NSMutableArray?
В соответствии с этим: Свойство NSString: скопировать или сохранить?
Для NSString/NSMutableString рекомендуется копировать.
Как насчет NSArray/NSMutableArray?
выберите copy
, если у вас нет особых причин не для этого, а также для всего поддерживающего кода/интерфейса для резервного копирования.
я подробно объяснил и несколько последствий здесь: NSMutableString как сохранить/скопировать
этот пример основан на NSString
s, но то же самое относится к NSArray
s.
Поскольку вы спрашиваете о NSArray (а не NSMutableArray), вы должны использовать копию. NSArray неизменен, поэтому вы не ожидаете изменения свойства этого типа. Но NSMutableArray является подклассом NSArray, поэтому он отлично подходит для передачи кому-либо в NSMutableArray. Если вы просто сохраните этот объект, он может измениться прямо под вашим носом. Если вы скопируете, а не сохраните, объект не изменится.
Однако, вы должны знать, что при копировании контейнера, такого как NSArray, вы копируете только контейнер, а не его содержимое. Если массив содержит изменяемые объекты, содержимое этих объектов может измениться, даже если сам массив является неизменным.
Если это проблема при изменении базовых данных, используйте копию. Фактически, это то, что вы хотите большую часть времени, поскольку изменение данных за кем-то назад является хорошим источником ошибок.
Обратите внимание, что копия будет по существу просто сохранять для NSArray. Только когда вы набрасываете NSMutableArray, больше работы.
Из ссылки, которую вы включили, это в значительной степени сводится к следующему: Свойство NSString: скопировать или сохранить?
Если вы хотите убедиться, что значение объекта не изменится во время выполнения, вы используете атрибут copy
, иначе retain
будет в порядке. Как правило, retain
будет нормально для NSMutableArrays и NSArrays (а также многих других объектов), поскольку вы (обычно) больше заинтересованы в объекте, а затем в содержащемся в нем значении. В случае NSString вы всегда заинтересованы в значении, поэтому вы copy
, чтобы убедиться, что он не изменится.
@jlehr:
Это зависит от того, интересует ли разработчик фактическое значение или нет. Всякий раз, когда вы заинтересованы в фактическом значении, используйте копию (так как вы не хотите, чтобы значение менялось во время исполнения), в противном случае сохранение в порядке. Из документов Apple:
В коде Objective-C распространена практика копирования объектов-объектов объектов, представляющих атрибуты. Переменные типа C обычно могут быть заменены объектами значений, но объекты с ценностью имеют преимущество инкапсуляции удобных утилит для обычных манипуляций. Например, объекты NSString используются вместо указателей символов, поскольку они инкапсулируют кодирование и хранение.
Также из документов Apple, по теме объектов значения:
Объект значения по существу является объектно-ориентированной оболочкой для простого элемента данных, такого как строка, число или дата. Классы общих значений в Cocoa являются NSString, NSDate и NSNumber. Объекты Value часто являются атрибутами других настраиваемых объектов, которые вы создаете.