1、NSNumber
我们知道,NSArray和NSDIctionary只能存储对象,而不能直接存储像int,float和struct,但是我们可以使用对象来封装基本数值。
包装:
+ (NSNumber *)numberWithChar:(char) value;
+ (NSNumber *)numberWithInt:(int) value;
+ (NSNumber *)numberWithFloat:(float) value;
+ (NSNumber *)numberWithBool:(BOOL) value;
Number *number;
number = [NSNumber numberWithInt:42];
拆包
- (char) charValue
- (int) intValue;
- (float) floatValue;
- (BOOL) boolValue;
- (NSString *)stringValue;
2、NSValue
实际上,NSNumber 是 NSValue的子类
下面演示一下,将结构体包装的例子
+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *) type;
NSRect rect = NSMakeRect(1,2,3,4);
NSValue * value = [NSValue valueWithBates:&rect objCType:@"encode(NSRect)"];
而拆包是这样的
value = [array objectAtIndex:0];
[value getValue:&rect];
而Cocoa也提供了便捷的方式
+ (NSValue *) valueWithPoint:(NSPoint) point;
+ (NSValue *) valueWithSize: (NSSize) size;
+ (NSValue *) valueWithRect: (NSRect) rect;
- (NSPoint) pointValue;
- (NSSize) sizeValue;
- (NSRect) rectValue;