Я знаю, что категории не должны использоваться для переопределения метода в классе, который они расширяют. Однако как насчет следующего сценария.
Рассмотрим классы:
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
Очевидно, это надуманный / упрощенный пример. Но он хорошо работает, чтобы продемонстрировать, чем я хотел бы заниматься. По сути, я хочу предоставить дополнительную функциональность нескольким классам в иерархии наследования.
Это безопасное / допустимое использование категорий? Есть проблемы?