Лучше ли использовать copy, чем retain во всех изменяемых классах iPhone SDK?

#objective-c #memo

#objective-c #памятка

Вопрос:

Я узнал, что лучше использовать copy для @property NSString, чем retain из-за проблем, которые вы можете получить, если вам предоставлен NSMutableString. Выполняется ли то же условие для NSArray , NSDictionary, NSMutableData?

Комментарии:

1. О каких проблемах вы говорите?

2. Я имею в виду проблему, заключающуюся в том, что когда кто-то предоставляет вам mutableString, а вы сохраняете его, если тот, кто предоставил вам object, изменяет его, ваш объект также будет затронут.

Ответ №1:

Под проблемами при сохранении я предполагаю, что вы имеете в виду, что данные могут неожиданно измениться.

Я бы рассмотрел возможность использования copy, если вышеуказанное неожиданно для обстоятельств, при которых вы используете строку или коллекцию. Таким образом, вы можете поддерживать известную копию строки, коллекции или другого объекта, который не изменится без вашего ведома об этом.

Однако могут быть другие причины использовать retain, а не copy для неизменяемой коллекции или строки. Вы можете согласиться с тем, что содержимое может измениться, однако используйте NSArray в свойстве, чтобы показать, что объект, использующий контейнер, не будет изменять его сам.

Я бы подумал, что свойства NSString, вероятно, больше хотят использовать copy, чем нет. Коллекции могут отличаться, посмотрите на свои требования и посмотрите, что лучше всего подходит в вашей ситуации.