我是靠谱客的博主 年轻汽车,这篇文章主要介绍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装箱

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+(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

或者如下操作

复制代码
1
2
3
4
5
6
NSNumber *number; number = @'X';//字符 number = @123;//整型 number = @123ul;//无符号长整型 number = @123ll;//long long ....

三、NSNumber开箱

复制代码
1
2
3
4
5
-(char)charValue - (int) intValue - (float)intValue - (BOOL)boolValue - (NSString*)stringValue

3.1 代码示例

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
void test(){ //方式一 //装箱 NSNumber *number = [NSNumber numberWithInt:23]; //装箱 NSLog(@"%d",[number intValue]); //方式二 //装箱 NSNumber *number2 = @'x'; //开箱 NSLog(@"%c",[number2 charValue]); }

3.2 结果

复制代码
1
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可以封任何值。

复制代码
1
+(NSValue*)valueWithBytes:(const void *) objCType:(const char *) type

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

4.1 代码示例

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
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 结果

复制代码
1
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 其他便捷的方法

复制代码
1
2
3
4
5
6
+(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 代码示例

复制代码
1
2
3
4
void test3(){ NSNull *nsNull = [NSNull null]; NSLog(@"%@",nsNull); }

5.2 结果

复制代码
1
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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部