2011-12-19 4 views
0

私は、アプリケーションの広範なデータに素早くアクセスするために、私のアプリケーションを通してアプリケーションデリゲートインターフェイス変数を使用してきました。Obj-C、NSUserDefaultsを使用して、簡単に/効率的に自分のアプリケーション/ビューの設定にアクセスするにはどうすればよいですか?

私はこれが私のアプリで効率の問題を引き起こしていると思います。やっとNSUserDefaultsに移行することにしました。他の方法を示唆していない限り?

多くの場合、ビューから同じ変数にアクセスしたいので、毎回NSUserDefaultsを使用してこの変数にアクセスするのは意味がありません。私はそれが遅くなると思う。

私は、viewDidLoadで何らかの種類の配列にすべての値を読み込み、値が変更された場合、クラス変数を保存/同期化して更新するクラスを考えています。

私はビューにプッシュすると、私はあまりにも保存する必要があると思う。

これは少し乱雑に聞こえ始めています。

しかし、どのアプローチが効率的かつ使いやすくなるのか不思議です。

+1

NSUserDefaultsにアクセスするのに時間がかかりません。NSDictionaryはちょうど2秒ごとに自動的に保存されるNSDictionaryです。だから、値をキャッシュするのではなく、 'NSUserDefaults'を使い続けるだけです。 –

+0

私はNSUserDefaultsを使用していることがあなたのアプリで効率の問題を引き起こしているのではないかと疑います。 1つのビューコントローラから別のビューコントローラへの移行にかかる時間の間に、デフォルトストアから何千もの値を追加/読み込むことができます。ボトルネックがどこにあるかをあなたのアプリにプロファイルしましたか? – kubi

答えて

0

実際にアクセスしているデータのサイズによって異なります。いくつかのNSDictionaryオブジェクトのディスクへのシリアライゼーションは、アプリの遅延を引き起こすのに十分な場合があります。

iOS開発について真剣に取り組んでいる場合は、コアデータの使用方法を学ぶ必要があります。 NSUserDefaultsができることは何でも、コアデータはより良くなります。 NSUserDefaultsが提供する唯一の利点は、小さな一回限りのアプリケーションでコード行を減らすことです。コアデータは家の基盤を築くのと同じように考えてください。NSUserDefaultsはテントを上げるのが好きです。

+0

「+(void)storeSetting:(NSString *)setting:(NSString *)value;」および「+(NSString *)retrunSetting:(NSString *)」のようないくつかの関数を作成しても問題ありません。 ? – Jules

0

アレイやセットなどの変数を使用する必要がある場合は、NSUserDefaultsを使用しない方が良いでしょう。同期すると、格納されているすべての値がディスクに保存されます(ディスクに保存する必要がない場合はもちろんです)。あなたはこの

User 
-name 
-lastname 
-email 
-messages 
Message 
-date 
-text 

のような関係を持つオブジェクトのグラフに大量のデータを格納する必要がある場合、あなたはより良いCoreDataフレームワークに探し始めるだろう、それは非常に使いやすいですし、ディスクアクセスに大きなデータセットを保存することができますそれらを迅速に。

たとえば、現在のユーザープロファイル値(username、emailなど)を保存するクラスが必要な場合は、AppDelegateを使用するのと全く同じシングルトンクラスを作成してみてください。あなたのデータをより小さなチャンクに分割します。

とにかく私はこの回答を私の前提に基づいて書いています。あなたが作業しているデータの種類とそのアプリのライフサイクルは何かを知っておくといいでしょう。

1

MVCパラダイムを使用する共有モデルオブジェクトは、他の複数のオブジェクトやクラスに変数を共有するために通常推奨される方法です。このModelオブジェクトはシングルトンにすることも、他のオブジェクトはgetter/setterへの高速アクセスのために単一のModelオブジェクトへの参照をローカルにコピーまたは委譲することができます。

潜在的により難しいコードの再利用とデバッグの問題に対処する場合は、最も高速な変数アクセスメソッドはCグローバル変数を使用するだけです(通常のCはObjective Cのサブセットです)。

NSUserDefaultsは、キー値辞書グローバル変数としてファイルシステムを使用しています。遅く、Cグローバル変数と同じ構造上の問題の多くがあります。

関連する問題