结构体如何使用NSData包装
2012-03-12 16:11
169 查看
结构体如何使用NSData包装
以下文字转载自:http://blog.csdn.net/iBright/article/details/5656164 向原作者表示感谢和敬意。也许你已经非常习惯了使用NSArray和NSDictionary写成.plist来保存游戏的分数记录,非常爽吧,但是对于用惯了C的人会感觉很难受,你必须的先将他们整理成整齐的ObjC格式才行,这里将介绍一种保存任意类型的方法。可能有点小题大作,但毕竟符合一部份人的使用习惯。进入正题
//先来两结构,注意我们要保存的可以是 int ,float,NSString,居然还可以是UIImage!!
typedef struct _INT{
int t1;
int t2;
}INT_STRUCT;
typedef struct _STRING{
NSString *st1;
NSString *st2;
UIImage *image;
}STRING_STRUCT;
//初始化两个变量
INT_STRUCT theInt = {2,5};
STRING_STRUCT theString = {@"string1",@"string2",[UIImage imageNamed:@"icon57.png"]};
//将这两个变量添加到data中,他们现在是二进制
NSMutableData *theData = [NSMutableData data];
[theData appendBytes:&theInt length:sizeof(INT_STRUCT)];
[theData appendBytes:&theString length:sizeof(STRING_STRUCT)];
//保存到你的路径,可以不需要后缀名
[theData writeToFile:@"mySave" atomically:YES];
//读取
INT_STRUCT newInt;
STRING_STRUCT newString;
NSMutableData *newData = [NSData dataWithContentsOfFile:@"mySave"];
//按地址赋值,注意range的范围
[newData getBytes:&newInt range:NSMakeRange(0,sizeof(INT_STRUCT))];
[newData getBytes:&newString range:NSMakeRange(sizeof(INT_STRUCT),sizeof(INT_STRUCT)+sizeof(STRING_STRUCT))];
NSLog(@"newInt.t1===%d",newInt.t1);
NSLog(@"newString.image===%@",newString.image);
NSLog(@"theString.image===%@",theString.image);
完了,比较一下我们输出的newString.image和theString.image,值是一样的,你可以用UIImageView将它显示出来,看看对不对
相关文章推荐
- 结构体如何使用NSData包装
- 如何使用find查找deque中保存的结构体对象
- std::map 如何使用结构体作为自定义键值
- 如何正确使用指针(指针作为输出型参数)与结构体指针作为函数参数
- 有如下CAT_s结构体定义,回答: 1) 在一台64位的机器上,使用32位编译,Garfield变量占用多少内存空间?64位编译又是如何?
- 如何在MAP中使用结构体
- 如何使用模板类基类中的结构体?
- Golang web 开发实战之 session 缓存:如何使用 redigo 将一个结构体数据保存到 redis?
- 教你如何使用stm32发送一帧数据(结构体中的数据)
- Golang web 开发实战之 session 缓存:如何使用 redigo 将一个结构体数据保存到 redis?
- 结构体如何使用NSData包装
- std::map 如何使用结构体作为自定义键值
- 如何让c语言使用结构体近似模拟c++中的类
- 面对不同类型的数值,我们如何使用结构体进行赋值
- 如何灵活地使用迭代?
- 如何使用华为软件开发云快速部署PHP网站
- SATA硬盘如何使用GHOSTSATA硬盘如何使用GHOST
- DELPHI 中如何使用菜单数组
- 如何使用java synchronized进行线程同步
- HTML5实践 -- 如何使用css3完成google涂鸦动画