Цель C - Категории и наследование - Добавить метод в базу и добавить переопределение в производный класс

Я знаю, что категории не должны использоваться для переопределения метода в классе, который они расширяют. Однако как насчет следующего сценария.

Рассмотрим классы:

Base.h

#import <Foundation/NSObject.h>

@interface Base: NSObject { NSNumber *n; }
@end

Derived.h

#import "Base.h"

@interface Derived: Base { NSString *s; }
@end

С категориями:

Base + Serialize.h

#import "Base.h"

@interface Base (Serialize)
- (NSString*)serialize;
@end

Base + Serialize.m

#import "Base+Serialize.h"

@implementation Base (Serialize)
- (NSString*)serialize
{
    return [NSString stringWithFormat:@"%@", n];
}

@end

Derived + Serialize.h

#import "Derived.h"

#import "Base+Serialize.h"

@interface Derived (Serialize)
- (NSString*)serialize;
@end

Derived + Serialize.m

#import "Derived+Serialize.h"

@implementation Derived (Serialize)
- (NSString*)serialize
{
    return [NSString stringWithFormat:@"%@, %@", s, [super serialize]];
}

@end

Очевидно, это надуманный / упрощенный пример. Но он хорошо работает, чтобы продемонстрировать, чем я хотел бы заниматься. По сути, я хочу предоставить дополнительную функциональность нескольким классам в иерархии наследования.

Это безопасное / допустимое использование категорий? Есть проблемы?

9
задан kloffy 23 February 2012 в 15:56
поделиться