我是靠谱客的博主 年轻汽车,最近开发中收集的这篇文章主要介绍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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复