oc-Foundation_05_装箱和开箱——NSNumber_NSValue

来源:互联网 发布:淘宝网惊现美女火辣 编辑:程序博客网 时间:2024/06/13 12:14

  • Foundation_05_装箱和开箱NSNumber_NSValue
    • 一开箱装箱定义
    • 二NSNumber装箱
    • 三NSNumber开箱
      • 1 代码示例
      • 2 结果
    • 四NSValue
      • 1 代码示例
      • 2 结果
      • 3 其他便捷的方法
    • 五NSNull
      • 1 代码示例
      • 2 结果

Foundation_05_装箱和开箱——NSNumber_NSValue

一、开箱装箱定义

基本数据类型数组——>对象 装箱(boxing)
对象——>基本数据类型数组 开箱(unboxing)


二、NSNumber装箱

+(NSNumber *)numberWithBool:(BOOL)value+(NSNumber *)numberWithChar:(char)value+(NSNumber *)numberWithDouble:(double)value+(NSNumber *)numberWithFloat:(float)value+(NSNumber *)numberWithInt:(int)value+(NSNumber *)numberWithInteger:(NSInteger)value+(NSNumber *)numberWithLong:(long)value+(NSNumber *)numberWithLongLong:(long long)value+(NSNumber *)numberWithShort:(short)value+(NSNumber *)numberWithUnsignedChar:(unsigned char)value+(NSNumber *)numberWithUnsignedInt:(unsigned int)value+(NSNumber *)numberWithUnsignedInteger:(NSUInteger)value+(NSNumber *)numberWithUnsignedLong:(unsigned long)value+(NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value+(NSNumber *)numberWithUnsignedShort:(unsigned short)value

或者如下操作

NSNumber *number; number = @'X';//字符 number = @123;//整型 number = @123ul;//无符号长整型 number = @123ll;//long long ....

三、NSNumber开箱

-(char)charValue - (int) intValue - (float)intValue - (BOOL)boolValue - (NSString*)stringValue

3.1 代码示例

void test(){    //方式一    //装箱    NSNumber *number = [NSNumber numberWithInt:23];    //装箱    NSLog(@"%d",[number intValue]);    //方式二    //装箱    NSNumber *number2 = @'x';    //开箱    NSLog(@"%c",[number2 charValue]);}

3.2 结果

2015-08-16 19:31:17.487 08_Foundation04_开箱和装箱[1115:65797] 232015-08-16 19:31:17.489 08_Foundation04_开箱和装箱[1115:65797] x

四、NSValue

NSNumber实际上是NSValue的子类,NSValue可以封任何值。

+(NSValue*)valueWithBytes:(const void *) objCType:(const char *) type 

传递的参数就是要封装数值的地址(&),描述这个数据类型的字符串可是使用@encode编译器指令来接收数据类型的名称并生成合适的字符串。

4.1 代码示例

typedef struct {    int nid;    char *fistName;}Xm;void test2(){    Xm xm = {12,"woshixiaoming"};    NSValue *value = [NSValue value:&xm withObjCType:@encode(Xm)];    Xm xm2;    [value getValue:&xm2];    NSLog(@"%d",xm2.nid);    NSLog(@"%s",xm2.fistName);}

4.2 结果

2015-08-16 20:14:07.059 08_Foundation04_开箱和装箱[1366:74106] 122015-08-16 20:14:07.064 08_Foundation04_开箱和装箱[1366:74106] woshixiaoming    

4.3 其他便捷的方法

+(NSValue*)valueWithPoint:(NSPoint)apoint; +(NSValue*)valueWithSize:(NSSize)size; +(NSValue*)valueWithRect:(NSRect)rect; -(NSPoint)pointValue; -(NSSize)sizeValue; -(NSRect)rectValue;

五、NSNull

+(NSNull*)null;
[NSNull null]总是返回一样的数值,所以可以使用运算符 == 将该值与其他值进行比较。

5.1 代码示例

void test3(){    NSNull *nsNull = [NSNull null];    NSLog(@"%@",nsNull);}

5.2 结果

2015-08-16 20:29:00.423 08_Foundation04_开箱和装箱[1406:76512] <null>
0 0
原创粉丝点击