A Day In The Life

とあるプログラマの備忘録

iPhoneとAndroidでちょっとしたデータの保存方法を比較してみる

データベースを使うほど大げさなものじゃなくて、ちょっとしたデータを保存したいときって結構あると思います。
そんな時iPhoneはNSUserDefaultsクラス、AndroidはSharedPreferencesクラスを使います。両者ともにKey-Value形式でデータを保存できます。ただし Android はオブジェクトを保存することができません(文字列と基本データ型のみ)ので注意が必要です。

iPhoneの場合

// インスタンスを取得する
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// データを取得する
NSString *data = [defaults stringForKey:@"Hoge"];
// データを保存する
[defaults setObject:@"Hello!" forKey:@"Hoge"];
// 保存を確定する(データの保存をすぐに反映させたいのであれば呼ぶこと)
[defaults synchronize]

NSUserDefaultsオブジェクトはシングルトンなのでreleaseしないように気をつけてください。
例は文字列オブジェクトを保存していますがいろいろなオブジェクトを保存することができます。詳しくは以下の記事が参考になります。

Androidの場合

public class TestActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // インスタンスを取得する
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
    // データを取得する(第2引数はデフォルト値)
    String data = sp.getString("Hoge", null);
    // データを保存する
    sp.edit().putString("Hoge", "Hello!").commit();
  }
}

データを保存するときにcommitメソッドを呼ばないと保存が反映されませんので気をつけてください。