ns user defaults
TRANSCRIPT
NSUserDefaults@akuraru
自己紹介
• 主催者
• Scalaが好き
• Objective-Cは生成するもの
@akuraru
CoreData
NSUserDefualts
静的ファイル
静的ファイル
• 実行時に変わらない
• plist, JSON, csv, text 他
NSUserDefualts
• 実行時に保存を簡単に扱うクラス
• アプリケーションの設定値などを保存する際用いる
• NSMutableDictionaryの様に扱える
CoreData
• iOSのデータベース
• ORマッパー
• 複数のオブジェクトを保存したい場合用いる
裏側の構造• plistで保存されている
• standerDefualtsでファイルを読み込む
• registerDefualtsで初期設定する
• synchronizeでファイルに保存する
• synchronizeは自動的に行われる
型
• NSString• NSNumber• NSArray• NSURL
plistで扱える型は全て扱える
• NSDictionary• NSData• NSDate型
注意• “synchronizeは自動的に行われる”が反映されるのが遅い
- (void)setHoge:(id)obj {NSUserDefaults *defualts = [NSUserDefaults standerDefaults];[defualts setObject:obj key:@”Hoge”];
}
- (id)hoge {NSUserDefaults *defualts = [NSUserDefaults standerDefaults];return [defualts objectForKey:@”Hoge”];
}
setHogeを呼び出した直後にhogeを呼び出しても正しい値は取れない
注意• “synchronizeは自動的に行われる”が反映されるのが遅い
- (void)setHoge:(id)obj {NSUserDefaults *defualts = [NSUserDefaults standerDefaults];[defualts setObject:obj key:@”Hoge”];[defualts synchronize];
}
- (id)hoge {NSUserDefaults *defualts = [NSUserDefaults standerDefaults];return [defualts objectForKey:@”Hoge”];
}
synchronizeを明示的に呼び出す
注意• “synchronizeは自動的に行われる”が反映されるのが遅い
+ (id)sheredManager {defualts = [NSUserDefaults standerDefaults];
}- (void)setHoge:(id)obj {
[defualts setObject:obj key:@”Hoge”];}
- (id)hoge {return [defualts objectForKey:@”Hoge”];
}
シングルトンにする
注意2
• 大量のデータを保存すると重くなる• synchronizeが特に重い
• NSArrayやNSDataの保存は避ける
大量のデータを保存するときはCoreData
まとめ
• CoreDataとNSUserDefualtsで適切に住み分けをしましょう
• 大量に保存すると遅延の原因になります