用NSNumber和NSValue基本数据类型和结构体的封装
来源:互联网 发布:activiti实战 源码 编辑:程序博客网 时间:2024/05/16 07:02
NSArray和NSDictionary都只能存储对象,基本数据类型(int、float、char等)和struct结构体要存到其中就必须先封装成对象。那么,可以使用NSNumber和NSValue将实现封装对象。
(另外,通常将一个基本数据类型封装成对象的过程被称为boxing,从对象中提取基本数据类型被称为unboxing。)
1、cocoa中提供NSNumber类来封装基本数据类型,使用以下方法可以将基本数据类型转换成NSNumber的对象:
(NSNumber *)numberWithChar:(char) value;
(NSNumber *)numberWithInt:(int) value;
(NSNumber *)numberWithBool:(BOOL) value;
……以此类推
还可以使用字面量语法来创建NSNumber对象:
NSNumber *number = @‘X’;//字符型
NSNumber *number = @12.3;//双浮点型
NSNumber *number = @11111ll;//long long
NSNumber *number = @YES;//布尔值
那么,如何从NSNumber对象出把基本数据类型重新取出来呢?可以使用下面的NSNumber对象方法:
-(char) charValue;
-(int) intValue;
-(BOOL) boolValue;
如果一个基本数据类型在封装前是浮点型,也可以将它以整形的方式取出,NSNumber会对数据进行适当的转换。
2、NSValue可以封装任意数据类型,我们通常使用NSValue来封装结构体,如下方法可以创建NSValue对象:
+(NSValue *) valueWithBytes:(const void *)value objCType:(const char *)type;
第一个参数是要封装的值的地址,可以用&取变量地址;
第二个参数是一个用于描述该数据类型的字符串,可以将数据类型的名字传入@encode()编译器指令,它就会返回合适的字符串。
那么,接下来就是如何从NSValue中取出被封装的结构体:
-(void)getValue:(void *)buffer;
参数表示的是这个结构体的值取出来后要放的地址。
除去上面介绍的普遍的用法,cocoa还提供了将常用的结构体转换为NSValue对象的快捷方式:
+(NSValue *)valueWithPoint:(NSPoint )aPoint;
+(NSValue *)valueWithSize:(NSSize) aSize;
+(NSValue *)valueWithRect:(NSRect) rect;
对应的unboxing方法:
-(NSPoint)pointValue;
-(NSSize)sizeValue;
-(NSRect)rectValue;
- 用NSNumber和NSValue基本数据类型和结构体的封装
- OC学习:OC_中基本数据类型和结构体的封装(NSNumber继承与NSValue)
- NSNumber和NSValue对基础C数据类型的对象化封装
- OC语言 封装 拆包基本数据类型 Foundation框架下的基础类 NSValue/NSNumber
- OC中NSValue和NSNumber基本用法
- NSNumber、NSValue和NSNull
- NSNumber,NSValue和NSData
- NSNumber和NSValue
- nsnumber和nsvalue
- NSNumber 和 NSValue
- NSNumber和NSValue
- NSValue和NSNumber的作用和关系
- NSValue和NSNumber(OC的包装类)
- NSNumber(封装基本数据类型)
- NSValue和NSNumber和NSString
- Foundation框架: 10.NSNumber和NSValue的基本认识和运用
- NSValue对任何结构体,基本类型,指针的封装
- 包装类---NSNumber和NSValue
- [C++学习历程]中级部分 OpenGL第一个例子实现
- Hibernate(四)——缓存策略+lazy
- Shell实例:ssh, scp 免密码登陆
- 嵌入式Linux下Camera编程--V4L2
- 结合Wireshark分析DNS 协议
- 用NSNumber和NSValue基本数据类型和结构体的封装
- Andriod && java interview2
- 用c语言写的贪吃蛇
- 一步步学习SPD2010--第十一章节--处理母版页(2)--默认母版页
- 网监如何爆菊率预测(转)
- andriod && java interview
- C++线程安全的单例模式
- 设计模式——抽象工厂Abstract Factory
- eclipse android使用问题小结