Неизменяемые объекты часто реализуют свой метод copyWithZone:
как return [self retain]
, поскольку нет смысла делать отдельную копию данных, если они никогда не изменятся. Тем не менее, им все еще нужно реализовать метод, чтобы быть совместимым со всем, что ожидает соответствия NSCopying (например, ключи NSDictionary).
Что касается использования, я бы придерживался тех же шаблонов использования, что и другие свойства "value", и вы не увидите никакой разницы в производительности, поскольку они, вероятно, будут вызывать retain
из copy
в любом случае. Это также распространяется на такие случаи, как добавление изменяемого подкласса, в котором реализована нетривиальная реализация NSCopying.