我想向 NSNumber 类添加一个属性,所以我必须对其进行子类化。文档指出我必须重写所有 NSValue 原始方法。由于 NSValue 文档没有说明哪些方法是原始方法,我认为这两个可能是实例化的原始方法:
– initWithBytes:objCType:
+ valueWithBytes:objCType:
所以我把我的课设为:
@interface MultipleNumber : NSNumber {
NSNumber *_number;
}
@property (nonatomic, getter = isMultiple) BOOL multiple;
@end
@implementation MultipleNumber
@synthesize multiple=_multiple;
-(id)initWithBytes:(const void *)value objCType:(const char *)type {
self = [super init];
if (self) {
_number=[[NSNumber alloc] initWithBytes:value objCType:type];
}
return self;
}
+(NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type {
return [[[MultipleNumber alloc] initWithBytes:value objCType:type] autorelease];
}
-(void)getValue:(void *)value { [_number getValue:value]; }
-(const char *)objCType { return [_number objCType]; }
@end
但是当我调用 [NSNumber numberWithBool:YES] 时,我仍然得到一个 _NSCFBoolean 类,并且没有调用“原始方法”。我怎样才能弄清楚哪些方法被认为是原始的?