IOS学习笔记-----OC的IO与文件
Pre:IO?首先 I 可以来自于,文件,网络,键盘,其他外设;O来自于文件,网络,屏幕,外设。程序的运行离不开IO。算法,函数都是必须有输入输出。O-C的io与java有些不一样。java是引入了流的概念,而O-C直接用NSData作为一个缓冲,一个转换,来处理io,可以说是用到了中介者模式。
1 NSData &NSMutableData
1.1 是什么:
一个是静态,一个是动态,字节缓冲的。作用:读数据到NSData,从NSData中写数据。Input->NSData->Output
文档解释:NSData creates static data objects, and NSMutableData creates dynamic data objects. NSData and NSMutableData are typically used for data storage and are also useful in Distributed Objects applications, where data contained in data objects can be copied or moved between applications.
1.2 怎么用
就是缓冲的作用
data:
dataWithContentsOfFile:
dataWithContentOfURL:
dataWithData:
NSData与NSString相互转化:使用NSString的dataUsingEncoding:方法,initWithData:encoding:
writeToFile:atomically:
writeToURL: atomically:
length
isEqualToData:
重要的用途:
1)在网络请求得到的响应会返回NSData对象;2)在对象归档时,可以将对象归档为NSMutableData,在将这个data写入文件。
2 NSFileManager
2.1 文件和目录的抽象,用于操作文件或目录。与java的File的不同之处,在于NSFileManager能够获取文件的内容返回NSData对象,java的File仅仅是抽象的描述不能得到内容;
作用:访问文件属性和内容,创建,删除,移动,和复制,查看目录包含的内容(递归,非递归)defaultManage获取单例对象
2.2 可以使用NSPathUtiliies.h管理路径:
NSUserName();
NSFullUserName();
NSHomeDictionary();
3 NSFileHandler处理文件的IO
3.1 处理文件,类似java的RandomAccessFile。并不能判断文件是否存在,不能创建文件这一点要切记。
3.2 读写文件的内容:readData,writeData
4 NSURL
5 NSBundle处理项目相关的资源
5.1 mainBundle获取单例:然后调用pathForResource,或URLForResource;iOS开发中经常会使用
6 对象归档
6.1 类似于java的序列化。使用NSKeyedArchiver
两种归档方式:1)调用类方法 archiveRootObject:toFile:;反归档:unarchiveObjectWithFile:返回指定的对象;
2) 用一个空的NSMutableData初始化NSKeyedArchiver,然后调用实例方法 encodObject:forKey:;之后吧data写入文件。反归档:decodeObjectForKey:
归档可以实现深度复制;