1.XML属性列表plist归档
- plist文件主要存数组和字典
- NSHomeDirectory()获取沙盒根目录
- NSTmporaryDirectory()临时文件夹
- 可以存自定义对象吗?
- 自己写的类(Person)是不能存放在plist文件当中的
- plist文件当中是没有办法存放自定义对象的
-
存
-
数组
- 获取沙盒目录NSString * path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory/NSCacheDirectory,搜索的范围NSUserDomainMask,是否展开全路径YES)[0]是一个数组,取出第0个数据,
-
参数
-
NSDocumentDirectory
:要搜索的目标 -
NSUserDomainMask:
搜索的范围 - NO/YES:是否展开路径
-
- 跨平台C语言的接口,可以在Mac上开发
-
- 拼接文件名称 path:stringByAppendingString:@“/array.plist”直接在后面追加
- stringByAppendingPathComponent:@"array.plist"
- array writeToFile:atomically:
- 获取沙盒目录NSString * path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory/NSCacheDirectory,搜索的范围NSUserDomainMask,是否展开全路径YES)[0]是一个数组,取出第0个数据,
-
字典
- stringByAppendingPathComponent:
- writeToFile:atomically:
-
-
取
-
数组
- path: stringByAppendingPathComponent:@"array.plist"
- arrayWithContensOfFile:
-
字典
- stringByAppendingPathComponent:
- dictionaryWithContentsOfFile:
-
2.Preference(偏好设置)
- 用来存放用户用户的偏好,用户名,密码,版本号
- NSUserDefault本质就是plist,字典类型的plist文件
- 保存到同一个plist文件当中
- 可以存放自定义对象吗?
- 不能,偏好设置本质是plist文件
存
- 创建单例对象 NSUserDefaults * def = [ NSUserDefault standardUserDefaults]
- [def setObject:@"xmg"forKey:@"name"]
- [def setInteger:forKey:]
- [def setBool:forKey:]
- [def synchronize]立马写入(ios7之后不要这样写)
- 会自动存放到沙盒文件里的preferences
-取
- NSUserDefaults * def = [ NSUserDefault standardUserDefaults]
- NSString * name = [def objectForKey:@"name"]
- [integerForKey:]
- [def boolForKey:]
3.NSKeyedArchiver归档(NSCoding)
-
可以存放自定义对象吗?
- 专门用于存放自定义对象的
-
NSKeyedArchiver会调用保存对象的encodeWithCoder:方法,询问要保存该对象的哪些属性
- 必须要实现encodeWithCoder:这个方法
- encodeObject:forKey:
- 必须要遵守<NSCoding>这个协议
- 必须要实现encodeWithCoder:这个方法
存
-
获取沙盒目录
- NSSearchPathForDirectoriesInDomains()[0]
-
拼接文件名
- stringByAppendingPathComponent:@“”文件名称以及后缀随遍写
NSKeyedArchiver archiveRootObject:对象 toFile:沙盒路径
NSKeyedArchiver会调用保存对象的encodeWithCoder:方法,询问要保存该对象的哪些属性
-
必须要实现encodeWithCoder:这个方法
- encodeObject:forKey:
必须要遵守<NSCoding>这个协议
取
- NSKeyedUnarchiver unarchiveObjectWithFile:
- 当调用NSKeyedUnarchiver时,会调用要保存对象的initWithCoder:询问要取出该对象的哪些属性
- init开头是一个构造方法
- self = [super init]
- [aDecoder decodeObjectForKey:] 把取出的值赋值给对象属性
-
为什么没有[super initWithCoder]
- UIView遵守了NSCoding协议
- NSObject没有遵守NSCoding协议
- 即父类没有遵守NSCoding协议,所以就不能写出来super initWithCoder
-
initWithCoder:方法什么时候调用
- 当开始解析一个文件的时候调用
-
awakeFromNib
- 当解析nib完毕时候调用
控制器销毁了,控制器的view不一定销毁
当使用IBOutlet时用weak,它并不是马上就会释放,内部有一个隐式的强指针对它有一个强引用
4.SQLite3
5.Core Data
- 苹果对SQLite3的封装
- 面向对象的存储