iOSローカルデータ永続化
3320 ワード
iOS開発では、ローカルデータを格納する必要があることがよくあります.通常、次のような方法があります. plistストレージ 優先設定記憶 アーカイブストレージ SQLiteストレージ core dataストレージ今日は前述の3つのストレージ方式を簡単に紹介します plistストレージ--plistストレージの本質は、配列と辞書を格納するためにplistファイルを生成することであるが、 を格納することに注意すべきである. plistが記憶する記憶データ(例えば配列を記憶したい) .
選好設定記憶--選好設定記憶は辞書の形式で選好設定を行い、使用法は辞書と同じ選好設定記憶は主に1つのキークラス 優先設定記憶 アーカイブ・ストレージ:任意のオブジェクトでアーカイブ可能 アーカイブストレージ(例えば、カスタムオブジェクト .
注意:
は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];
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]
を呼び出す必要があります.