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