我是靠谱客的博主 年轻汽车,最近开发中收集的这篇文章主要介绍oc-Foundation_05_装箱和开箱——NSNumber_NSValueFoundation_05_装箱和开箱——NSNumber_NSValue,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 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] 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>

最后

以上就是年轻汽车为你收集整理的oc-Foundation_05_装箱和开箱——NSNumber_NSValueFoundation_05_装箱和开箱——NSNumber_NSValue的全部内容,希望文章能够帮你解决oc-Foundation_05_装箱和开箱——NSNumber_NSValueFoundation_05_装箱和开箱——NSNumber_NSValue所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部