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