2016-05-27 8 views
0

私はゲームを持っており、私は常にユーザーの進捗状況を保存しています。非常に速い進歩的なゲームであり、ゲームのいくつかのポイントでは、ユーザーの進行が6倍になる可能性があります。NSUserDefaultsにいくつかのプログレッション変数を保存し、毎秒6回同期させる必要があります。これは私のiPhone6s 64GBで正常に動作していますが、私はそれがiPhone4 16GBが処理できるものではないかもしれないことを恐れています。NSUserDefaultsパフォーマンスの懸念

私はそれをテストする方法はありませんが、シミュレータはこのようなものでは本当に正確ではなく、私は遅いデバイスがありません。また、NSUserDefaultsのpreformanceレポートに関する多くの詳細をドキュメントで見つけることができないようです。誰かがその話題に関する知識を持っていますか?

は、私は私の.hに定義し、単に保存しappWillResignActive中に一度NSUserDefaultsを同期するよ地元NSDictionaryの中に保存する変数を検討しているが、私はクラッシュ時におけるデータの損失を心配し、デバイスのバッテリーが死んで、私はNSTimerを持って5秒ごとにデータを保存することができ、クラッシュ時の損失を最小限に抑えるためにappWillResignActiveを保存することもできると思います。 NSUserDefaultsが小さなデバイスでうまく処理できるかもしれないものの、大量のコードを書き直す必要はありません。

+0

"synchronize"を呼び出すことは、データをディスクに書き込むこととは関係がないことに注意してください。純粋に同じデフォルトストアを読み書きする別のアプリと同期することです(これは非常にまれで、Apple以外のアプリではほとんど使えません)。 'synchronize'はすぐに(最終的に)人々が思うようなことをしないので廃止されます。メンテナからNSUserDefaultsを正しく使用していることの書き方を参照してください:http://dscoder.com/defaults.html –

+0

ありがとう@RobNapier私はそれを知らなかったのです! –

+0

私は答えに同意していますが、あまりにも多くのatmを「同期」と呼んでいますが、あなたの「懸念」はおそらく根拠がないと指摘したいと思います。 [このリンク](https://mixpanel.com/trends/#report/iphone_models/from_date:-20,to_date:0)によると、市場シェアは約1%に過ぎません。私は大量の時間を1%の最適化に費やすことを勧めません。 –

答えて

3

1秒間に6回同期を呼び出さないでください。 (ディスクベースの操作は1秒間に6回行わないでください。)システムはユーザーのデフォルト設定を保存します。あなたが言うように、appWillResignActiveで同期を呼び出すことは合理的です。

クラッシュした場合、データが失われる可能性があります。しかし、よく書かれたアプリはクラッシュするべきではありません。定期的にクラッシュしている場合は、ユーザーのデフォルトを同期しないで問題になります。 (あなたのアプリはそのことを言っているとは言わない)

+0

いいですね、NSUserDefaultsに頻繁に保存して、タイマーやappWillResignActiveでも毎分同期を呼び出します –

+1

@AlbertRenshawあなたのアプリが定期的にクラッシュすることを期待しない限り、毎分 'synchronize'を呼び出す理由はありません。 – rmaddy

+0

@rmaddy私のアプリはいつもクラッシュするとは思っていません;)しかし、私は残念より安全です。 –

2

NSUserDefaultsはメモリ内にちょうどNSDictionaryである。値を設定するたびに不必要にsynchronizeに電話しない限り、問題は発生しません。 OSは、メモリ内表現をしばらく毎回保持します。確かに毎秒複数回ではありません。

NSUserDefaultsは、必要なだけ頻繁に使用してください。あなたのアプリが非アクティブになったり、バックグラウンドに入ったりするような珍しい時には、synchronizeに電話するだけです。

+0

変数hahaを保存するたびに同期を呼び出すと、やっています。 –

関連する問題