【发布时间】:2012-02-23 15:56:09
【问题描述】:
我知道不应使用类别来覆盖它们所扩展的类中的方法。但是,下面的场景呢?
考虑类:
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
派生+序列化.h
#import "Derived.h"
#import "Base+Serialize.h"
@interface Derived (Serialize)
- (NSString*)serialize;
@end
派生+序列化.m
#import "Derived+Serialize.h"
@implementation Derived (Serialize)
- (NSString*)serialize
{
return [NSString stringWithFormat:@"%@, %@", s, [super serialize]];
}
@end
显然,这是一个人为/简化的示例。但它很好地展示了我想做的事情。本质上,我想为继承层次结构中的多个类提供附加功能。
这是对类别的安全/有效使用吗?有什么陷阱吗?
【问题讨论】:
标签: objective-c inheritance categories