- 一般數(shù)據(jù)存儲(chǔ)到Library/Caches文件夾中,由用戶決定是否刪除緩存
Plist存儲(chǔ)
- 如何判斷一個(gè)對(duì)象能不能plist存儲(chǔ),看看對(duì)象有沒有writeToFile方法.
- 獲取應(yīng)用沙盒文件夾方法
NSString *homeFile = NSHomeDictionary();
- 獲取caches路徑
// 獲取Cache文件路徑
// NSSearchPathDirectory:搜索的目錄
// NSSearchPathDomainMask:搜索范圍 NSUserDomainMask:表示在用戶的手機(jī)上查找
// expandTilde 是否展開全路徑,如果沒有展開,應(yīng)用的沙盒路徑就是~
// 存儲(chǔ)一定要要展開路徑
NSString *cachePaht = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
// 拼接文件名
NSString *filePath = [cachePaht stringByAppendingPathComponent:@"personArr.plist"];
// File:文件的全路徑
[arr writeToFile:filePath atomically:YES];
plist存儲(chǔ)不能存儲(chǔ)自定義對(duì)象
偏好設(shè)置存儲(chǔ)(Preference)
- 好處
- 不需要關(guān)心文件名
- 快速做鍵值對(duì)存儲(chǔ)
- 存
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:@"xmg" forKey:@"account"];
[userDefaults setObject:@"123" forKey:@"pwd"];
[userDefaults setBool:YES forKey:@"rmbPwd"];
// 在iOS7之前,默認(rèn)不會(huì)馬上把跟硬盤同步
// 同步
[userDefaults synchronize];
- 取
NSString *pwd = [[NSUserDefaults standardUserDefaults] objectForKey:@"pwd"];
自定義對(duì)象存儲(chǔ)(歸檔)
將自定義對(duì)象歸檔
必須遵守NSCoding協(xié)議
實(shí)現(xiàn)協(xié)議方法
歸檔
Person *p = [[Person alloc] init];
p.age = 18;
// 獲取cache
NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
// 獲取文件的全路徑
NSString *filePath = [cachePath stringByAppendingPathComponent:@"person.data"];
// 把自定義對(duì)象歸檔
[NSKeyedArchiver archiveRootObject:p toFile:filePath];
- 解檔
// 獲取cache
NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
// 獲取文件的全路徑
NSString *filePath = [cachePath stringByAppendingPathComponent:@"person.data"];
// 解檔
Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
- 自定義對(duì)象
#import "Person.h"
@implementation Person
// 什么時(shí)候調(diào)用:自定義對(duì)象歸檔的時(shí)候
// 作用:用來描述當(dāng)前對(duì)象里面的哪些屬性需要?dú)w檔
- (void)encodeWithCoder:(NSCoder *)aCoder
{
// name
[aCoder encodeObject:_name forKey:@"name"];
// age
[aCoder encodeInt:_age forKey:@"age"];
}
// 什么時(shí)候調(diào)用:解檔對(duì)象的時(shí)候調(diào)用
// 作用:用來描述當(dāng)前對(duì)象里面的哪些屬性需要解檔
// initWithCoder:就是用來解析文件的。
- (id)initWithCoder:(NSCoder *)aDecoder
{
// super:NSObject
#warning 什么時(shí)候需要調(diào)用initWithCoder 父類遵守NSCoding協(xié)議的時(shí)候,調(diào)用super initWithCoder
if (self = [super init]) {
// 注意:一定要給成員變量賦值
// name
_name = [aDecoder decodeObjectForKey:@"name"];
// age
_age = [aDecoder decodeIntForKey:@"age"];
}
return self;
}
@end