Должны ли детские классы внедрять протоколы, которым соответствуют их родители? - PullRequest
1 голос
/ 09 мая 2011

У меня есть класс MyClass, который реализует протокол NSCopying, и у меня есть класс MyClassChild, который наследуется от MyClass.MyClassChild не реализует протокол NSCopying.Учебник, который я читаю, говорит, что должен, но я могу успешно строить!Учебник не прав?

@interface MyClass : NSObject <NSCopying> {

}

@end

@implementation MyClass

-(id)copyWithZone:(NSZone *)zone
{
    return self;
}

@end

@interface MyClassChild : MyClass {

}

@end

@implementation MyClassChild

@end

Ответы [ 3 ]

2 голосов
/ 09 мая 2011

Когда вы не предоставляете реализацию для метода copyWithZone: в MyClassChild, класс наследует реализацию метода от своего суперкласса (MyClass).Это означает, что MyClassChild соответствует протоколу NSCopying.Если MyClassChild нужно сделать что-то особенное, когда копируются его экземпляры, вы должны переопределить copyWithZone: и сделать там все, что нужно.Надеюсь, это поможет.

PS Надеюсь, вы понимаете, что возвращение self не является хорошим способом реализации copyWithZone:?

1 голос
/ 09 мая 2011

MyClassChild наследует свою реализацию NSCopying от MyClass. Даже если вы указали

@interface MyClassChild : MyClass <NSCopying>

компилятор достаточно умен, чтобы проверить, реализует ли какой-либо из суперклассов -copyWithZone:

0 голосов
/ 09 мая 2011

Вы абсолютно правы, что NSCopying требует, чтобы объект реализовал copyWithZone.Однако MyClass реализует copyWithZone.Таким образом, MyClassChild уже является реализацией этого в силу производного от MyClass.

...