0

これが私のコードです:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    NSLog(@"scrolled!");
    [[NSUserDefaults standardUserDefaults] setFloat:self.mainTableView.contentOffset.y forKey:@"grTableCOy"];
}

ユーザーがスクロールするたびにわかるように、NSUserDefaults にいくつかの値を設定しています。ちょっと質問です - これは効率的ですか?

NSUserDefaults は、新しい値を設定するたびにディスクに保存しますか、または同期メソッドが呼び出されたときにのみ保存しますか?

4

3 に答える 3

1

NSUserDefaultsのマニュアルには、キャッシュに関する情報がいくつかあります。この部分は、あなたの質問に答えるはずです。

NSUserDefaultsは、デフォルト値が必要になるたびにユーザーのデフォルトデータベースを開く必要がないように、情報をキャッシュします。定期的に自動的に呼び出されるsynchronizeメソッドは、メモリ内キャッシュをユーザーのデフォルトデータベースと同期させます。

つまり、変更はメモリに効率的に保存され、手動で呼び出さない限りsynchronize、値を変更するたびにデータが保持されるのではなく、定期的に保持されます。

値が書き込まれて保存されていることを本当に確認したい場合は、synchronize手動で呼び出すことができます。これは、アプリが終了しようとしているときにおそらく良い考えです。

于 2012-11-03T14:17:42.550 に答える
1

私はあなたがしていることのパフォーマンスの側面について本当に話すことができません。明確な答えを得る唯一の方法は、機器を起動し、NSUserDefaultsを使用する場合と使用しない場合のスクロールビューの応答を測定することです。

それは節約できるのかという質問に。さて、この場合、ドキュメントへの旅行は質問に答えるはずです。synchronizeメソッドのスニペットは次のとおりです。

Writes any modifications to the persistent domains to disk 
and updates all unmodified persistent domains to what is on disk.

繰り返しますが、パフォーマンスの問題を確認する唯一の方法は、機器で測定することです。

幸運を!

于 2012-11-03T14:20:08.187 に答える