详解Objective-C文件加载与保存

移动开发 iOS
Objective-C文件加载与保存是本文要介绍的内容,Cocoa提供了Core Data,能够在后台处理所有文件内容,但是本章讨论的是Cocoa提供的两个通用的文件处理类:属性列表和对象编码。

Objective-C文件加载与保存是本文要介绍的内容,Cocoa提供了Core Data,能够在后台处理所有文件内容,但是本章讨论的是Cocoa提供的两个通用的文件处理类:属性列表和对象编码。

属性列表

有一类名为属性列表的对象,常简写为plist

属性列表类包括:NSArray, NSDictionary, NSString, NSNumber, NSDate,NSData以及他们的变体

NSDate

NSDate是用于处理时间和日期的基础类

[NSDate date]获得当前日期

dateWithTimeIntervalSinceNow,接受一个NSTimeInterval参数,通过制定时间偏移量获得新时间。正值表示将来,负值表示过去

NSData

NSData包装了大量字节,可以获得数据的长度和指向字节起始位置的指针

用dataWithBytes:length:方法获得

length方法给出字节数

bytes方法给出指向字节起始位置的指针

NSData不能改变,创建后就只能使用而不能改变,NSMutableData可以改变

写入和读取属性列表

如何使用属性列表和文件关联呢:

集合属性列表类具有:writeToFile:atomically:方法,用于将属性列表写入文件

NSString、NSData也具有:writeToFile:atomically:方法,但只写入字符串或数据块

注意:atomically参数是BOOL型,用于说明保存过程中是否使用临时文件,会占用双倍空间,但除非文件非常大,否则应该使用YES,以防破坏原始文件

通过arrayWithContentsofFile:方法可以将文件内容读入到数组中

writeToFile:atomically:的缺点是,不会返回错误信息,如果不能加载,只能从方法中得到nil指针

编码对象

Cocoa具备一种机制,将对象转换为某种格式保存到磁盘中,当读取这些数据块到内存后,还能基于保存的对象创建新的对象。这个过程称为编码和解码,或称为序列化和反序列化

例如:使用Interface Buider时,从库中拖动对象,这些对象被保存到nib文件中,换言之,对象被序列化并保存到磁盘中。程序运行时,会将nib文件加载到内存中,串行化对象

通过实现NSCoding协议,可以使自己的对象实现相同的功能

  1. @protocal NSCoding  
  2. -(void) encodeWithCoder:(NSCoder *) aCoder;  
  3. -(id) initWithCoder:(NSCoder *) aDecoder; 

NSCoder是一个抽象类,我们只用它的子类NSKeyedArchiver和NSKeyedUnarchiver

  1. encodeObject:forkey方法编码,encodeXXX:forkey:  
  2. decodeObject:forkey方法解码,decodeXXX:forkey; 

注意:initWithCoder需要调用父类init,如果父类采用NSCoding协议,则调用initWithCoder,否则调用init即可。

小结:详解Objective-C文件加载与保存的内容介绍完了,希望通过本文的学习对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-08-04 13:38:01

Objective-C C++

2011-07-29 16:16:30

Objective-c block

2011-08-17 10:58:59

Objective-C构造函数

2011-07-18 16:36:51

Objective-C XCode

2015-10-08 10:01:10

Objective-CLayout

2014-04-01 10:50:42

iOS开发runtimeObjective-C

2011-08-17 10:29:39

Objective-C预处理

2011-08-15 14:32:42

Objective-C委托协议

2011-07-27 16:55:12

Objective-c 闭包

2011-08-01 17:11:43

Objective-C 函数

2014-04-28 09:56:56

Objective-CiOS命名空间

2011-08-17 11:05:22

Objective-C方法

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用键

2011-07-08 18:44:09

Objective-C Self Super

2011-07-29 15:47:21

iPhone开发 Objective- C

2011-08-04 18:14:42

Objective-C 消息

2011-07-27 16:36:03

iphone Objective- 静态库

2011-08-04 10:04:17

Objective-C 分类 协议

2011-08-16 13:34:23

Objective-C归档

2011-08-10 18:07:29

Objective-C反射
点赞
收藏

51CTO技术栈公众号