iOSローカルデータ永続化

3320 ワード

iOS開発では、ローカルデータを格納する必要があることがよくあります.通常、次のような方法があります.
  • plistストレージ
  • 優先設定記憶
  • アーカイブストレージ
  • SQLiteストレージ
  • core dataストレージ今日は前述の3つのストレージ方式を簡単に紹介します
  • plistストレージ--plistストレージの本質は、配列と辞書を格納するためにplistファイルを生成することであるが、 はplistでplist
  • を格納することに注意すべきである.
  • plistが記憶する記憶データ(例えば配列を記憶したい)
  • .
        NSArray *array = @[@"jack",@26];
        // caches 
        //NSSearchPathDirectory directory --> 
        //NSSearchPathDomainMask domainMask --> 
        //BOOL expandTilde --> 
       NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        // 
        NSString *filePath = [cachesPath stringByAppendingPathComponent:@"array.plist"];
        // 
        [array writeToFile:filePath atomically:YES];
    
    - plist ( )
    
        // caches 
        NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        // 
        NSString *filePath = [cachesPath stringByAppendingPathComponent:@"array.plist"];
        // 
        NSArray *array = [NSArray arrayWithContentsOfFile:filePath];
    
  • 選好設定記憶--選好設定記憶は辞書の形式で選好設定を行い、使用法は辞書と同じ選好設定記憶は主に1つのキークラスNSUserDefaults :
  • 優先設定記憶
  •     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:@"jack" forKey:@"name"];
        [defaults setInteger:26 forKey:@"age"];
    
    -  
    
    NSString *name = [[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
        NSInteger age = [[NSUserDefaults standardUserDefaults] integerForKey:@"age"];
    
  • アーカイブ・ストレージ:任意のオブジェクトでアーカイブ可能 NSKeyedArchiverカスタム・オブジェクトのアーカイブに特化
  • アーカイブストレージ(例えば、カスタムオブジェクトcarを格納したい)
  • .
    ZDCar *car = [[ZDCar alloc] init];
        car.brand = @"BMW";
        car.color = @"black";
        // caches 
        NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        // 
        NSString *filePath = [cachesPath stringByAppendingPathComponent:@"car.xxoo"];
        // 
        [NSKeyedArchiver archiveRootObject:car toFile:filePath];
    
    -  
    
    // caches 
        NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        // 
        NSString *filePath = [cachesPath stringByAppendingPathComponent:@"car.xxoo"];
        // 
        ZDCar *car = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    

    注意:[NSKeyedArchiver archiveRootObject:car toFile:filePath]; [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];の2つのメソッドを呼び出すと、下位レベルでは- (void)encodeWithCoder:(NSCoder *)aCoder- (nullable instancetype)initWithCoder:(NSCoder *)aDecoderの2つのメソッドが呼び出されます.したがって、カスタムクラスでというプロトコルを遵守し、上記の2つのメソッドを実装する必要があります.また、- (nullable instancetype)initWithCoder:(NSCoder *)aDecoderというメソッドを実装する際に、親がというプロトコルを遵守すると、[super initWithCoder:aDecoder]を呼び出す必要があります.逆に、[super init]を呼び出す必要があります.