NSColor и NSGradient как свойства - есть ли смысл копировать? - PullRequest
4 голосов
/ 05 ноября 2008

Я хорошо знаком с причинами желания копировать собственность вместо сохранения. (По сути, аргумент «значение против отношения». Например, вы почти всегда хотите копировать строки.)

А как насчет NSColor и NSGradient?

Они оба соответствуют NSCopying, но, как в настоящее время реализовано, являются неизменяемыми.

Мысли

Ответы [ 2 ]

4 голосов
/ 05 ноября 2008

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

Что касается использования, я бы придерживался тех же шаблонов использования, что и другие свойства "value", и вы не увидите никакой разницы в производительности, поскольку они, вероятно, будут вызывать retain из copy в любом случае. Это также распространяется на такие случаи, как добавление изменяемого подкласса, в котором реализована нетривиальная реализация NSCopying.

3 голосов
/ 05 ноября 2008

Подклассы NSColor и NSGradient, которые назначены вашим свойствам, могут не быть неизменяемыми или ссылочно прозрачными, поэтому вам все равно следует использовать ту же логику для определения сохранения против копии, что и для любого объекта, который обычно использует изменяемые подклассы, даже если на практике это вряд ли имеет значение в большинстве случаев.

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