iOS學(xué)習(xí) - 數(shù)據(jù)存儲(chǔ)

  • 一般數(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容