Я смущен, глядя на документацию Apple и читая шаблоны проектирования Какао. В документации Apple для copyWithZone:
говорится:
Этот метод существует, поэтому объекты класса можно использовать в ситуациях, когда вам нужен объект, соответствующий протоколу NSCopying. За Например, этот метод позволяет использовать объект класса как ключ к Объект NSDictionary. Вы не должны отменять этот метод.
Для копии
он гласит:
Это удобный метод для классов, которые используют NSCopying протокол. Исключение возникает, если нет реализации для copyWithZone :.
NSObject сам по себе не поддерживает протокол NSCopying. Подклассы должен поддерживать протокол и реализовывать метод copyWithZone :. А версия подкласса copyWithZone: метод должен отправлять сообщение to super first, чтобы включить его реализацию, если подкласс происходит непосредственно от NSObject.
В примерах в шаблонах дизайна какао они переопределяют copyWithZone:
и mutableCopyWithZone:
, но не переопределяют копию
при соответствии NSCopying
протокол. Это то, что мне следует делать, если я хочу использовать свой собственный подкласс в NSDictionary
в качестве ключа?
Или мне заменить копию
?
Точно так же, если я сделаю [myClass copy]
, вызовет ли это copyWithZone:
или copy
для этого моего настраиваемого подкласса? Спасибо.