oc-Foundation_05_装箱和开箱——NSNumber_NSValue

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] 23
2015-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] 12
2015-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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值