NSArray和 Vector<struct>互转
来源:互联网 发布:淘宝服务热线 人工 编辑:程序博客网 时间:2024/06/02 02:01
最近写程序的时候遇到这样的问题,需要将Vector里头的struct转存到NSArray里头。
一般遇到这种问题,常见处理是再定义一个class,然后把struct里头的内容一一搬过来,然后放到NSArray里头。这个做法虽然麻烦,但是安全,不会引起其他的问题。
我不想再重新定义一个class,再为他初始化,写属性,转存的时候一一赋值,因为实在太麻烦了,我想直接用他的struct定义。所以,我通过NSValue来做这件事情。
C类型和NSValue之间的转换
#define MyGetNSValueFromCType(cValue) ([NSValue value:&cValue withObjCType:@encode(typeof(cValue))])
#define MySetCValueFromNSValue(ocValue, cValue) [ocValue getValue:&cValue]
使用方法如下:
int count = 10;
NSValue *value = MyGetNSValueFromCType(count);
int newCount;
MySetCValueFromNSValue(value, newCount);
Vector和NSArray之间的转化
#define MyGetArrayFromVector(vec) ({\
NSMutableArray *arr = [NSMutableArray array];\
for(int i = 0; i < vec.size(); i++)\
{\
NSValue *value = MyGetNSValueFromCType(vec[i]);\
if (value != nil)\
[arr addObject:value];\
}\
[arr count] == 0 ? nil : arr;\
})
#define MySetVectorFromArray(vec, type, arr) {\
for(int i = 0; i < [arr count]; i++)\
{\
type _value;\
MySetCValueFromNSValue([arr objectAtIndex:i], _value);\
vec.push_back(_value);\
}\
}
使用方法:
struct hello
{
int a;
int b;
};
vector<hello> aVector;
hello a;
a.a = 10;
a.b = 100;
hello b;
b.a = 20;
b.b = 200;
aVector.push_back(a);
aVector.push_back(b);
NSArray *myArr = NdGetArrayFromVector(aVector);
vector<hello> bVector;
NdSetVectorFromArray(bVector, hello, myArr);
注意:
这里的struct里头的成员类型只能是C语言的基础类型,不能是string,vector这些C++的类!因为它们不是简单的内存块,转换后的 NSValue很容易出现依赖于原对象的内存的状况。(如果您仅在当前函数内使用转换后的对象,倒是没有问题的,但是这种需求应该不会出现吧^_^)
本文出自 “风沙” 博客,请务必保留此出处http://kensou.blog.51cto.com/3495587/658222
- NSArray和 Vector<struct>互转
- nsarray和nsdata互转
- JSON 和 NSDictionary NSArray互转
- map vector struct+sort
- struct基础&通过struct和sort结合代替vector列排列
- NSData和NSString、NSDictionary、NSArray互转
- typedef struct tag***{}***;typedef vector< >;
- 将struct装进vector里
- struct和typedef struct
- struct和typedef struct
- struct和typedef struct
- struct 和 typedef struct
- struct和typedef struct
- struct和typedef struct
- struct和typedef struct
- struct和typedef struct
- struct和typedef struct
- typedef struct和struct
- Virtualbox中的XP虚拟机和主机Win7之间的共享文件夹
- oracle自动共享内存管理(ASMM) .
- svn报Could not read status line: connection was closed by server(不能读状态行: 连接被服务器关闭)
- HTTP POST GET 本质区别详解
- spring_aop_annotaion
- NSArray和 Vector<struct>互转
- 標準C++的類型轉換:static_cast、dynamic_cast
- windows 环境变量
- SQL基础5
- 设计模式总结—创建型模式
- mysql 互为主备的简单搭建
- 快捷方式删除不成功的解决办法
- QT MD5 SHA1加密使用
- 完美解决Ubuntu下vi编辑器方向键变字母的问题