Нужно ли вызывать [super encodeWithCoder] при подклассу объекта, реализующего NSCoding?

Я знаю, что когда вы пишете метод initWithCoder подкласса объекта, который реализует NSCoding, вы должны называть super initWithCoder (вместо super init), но мне нужно вызвать super encodeWithCoder в реализации encodeWithCoder?

Ответы

Ответ 1

Если вы наследуете класс, поддерживающий кодирование, обычно рекомендуется использовать [super encodeWithCoder:] в вашем методе encodeWithCoder:, так как [super initWithCoder:] должен использоваться в методе initWithCoder:.

Документация: Ссылка на протокол NSCoding

Ссылка: http://www.cocoadev.com/index.pl?NSCoder

если класс наследуется от класса, который соответствует (NSObject не соответствует), то вы должны включить метод [encodeWithCoder:].

//  <NSCoding> protocol methods

-(void)encodeWithCoder:(NSCoder*)coder
{
    [super encodeWithCoder:coder];
    /*
    [coder encodeObject: theNSStringInstanceVariable];
    [coder encodeObject: theNSDictionaryInstanceVariable];
    [coder encodeValueOfObjCType:@encode(BOOL) at:&theBooleanInstanceVariable];
    [coder encodeValueOfObjCType:@encode(float) at:&theFloatInstanceVariable];
    */
}