NSNumber クラスにプロパティを追加したいので、サブクラス化する必要があります。ドキュメントには、すべての NSValue プリミティブ メソッドをオーバーライドする必要があると記載されています。NSValue のドキュメントにはどのメソッドがプリミティブなのかが記載されていないため、これら 2 つはおそらくインスタンス化のためのプリミティブなメソッドであると考えました。
– 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 クラスが返され、「プリミティブ メソッド」は呼び出されません。どのメソッドがプリミティブと見なされるかをどのように把握できますか?