Jestem zdezorientowany patrząc na dokumentację Apple i czytając wzorce projektowe kakao. W dokumentacji firmy Apple dla copyWithZone:
, czyta:Zastąp kopię lub copyWithZone: lub obie?
Ta metoda istnieje więc obiekty klasy mogą być używane w sytuacjach, gdy trzeba obiektu zgodnego z protokołem NSCopying. W przypadku przykładu ta metoda umożliwia użycie obiektu klasy jako klucza do obiektu NSDictionary o numerze . Nie należy przesłonić tej metody.
Dla copy
czyta:
Jest to metoda wygoda dla klas, które przyjęły protokół NSCopying . Wyjątek jest podniesiony, jeśli nie ma implementacji dla copyWithZone :.
NSObject sam nie obsługuje protokołu NSCopying. Podklasy muszą obsługiwać protokół i implementować metodę copyWithZone :. Wersja podklasy metody copyWithZone: powinna najpierw wysłać wiadomość , aby włączyć jej implementację, chyba że podklasa pochodzi bezpośrednio z NSObject.
W przykładach w Patterns Cocoa Design, one przesłonić copyWithZone:
i mutableCopyWithZone:
ale nie zastępują copy
gdy zgodny z protokołem NSCopying
. Czy to powinienem zrobić, jeśli chcę użyć mojej niestandardowej podklasy w kluczu NSDictionary
? Czy mogę zastąpić copy
?
Podobnie, jeśli wykonam [myClass copy]
, czy to wywołanie copyWithZone:
lub copy
dla tej niestandardowej podklasy? Dzięki.