开发过程中我有把结构体或者基本数据类型加入数组或字典的需求,比如CGSize,CGRect,CGPoint等数据,但是大家都知道OC的容器只能加入对象类型的数据。
一般有两个解决办法,第一种办法是转成NSString,用时再从NSString转成需要的数据类型,但是这种方式有两个缺点:1.不支持自定义类型的结构体
2.性能太差
第二种就是NSValue;而且NSVAlue还可以实现加入容器,但是不增加引用计数。
NSValue的API:
基本方法
- initWithBytes:objCType:
以指定的类型初始化一个包装了传入数据的NSValue对象
objCType
获得当前NSValue对象包装的数据类型
现在系统支持的结构体类型有以下几种:
支持类型 | 便捷设置方法 | 取值方法 |
---|---|---|
CGPoint | + valueWithPoint: | pointValue |
CGVectorValue | + valueWithVector: | vectorValue |
CGSize | + valueWithSize: | sizeV |