4

私は Android アプリを iOS 上に移植する任務を負っています。残念ながら、これまで iOS アプリを作成したことがないので、基本的な質問がいくつかあります。

Android では、作成したアプリは、android.app.Application を拡張するクラスで頻繁に使用するいくつかの異なるコア オブジェクトを維持していました。これらのオブジェクトにアクセスする必要がある場合は、getApplication();を呼び出します。 このクラスでは、カスタム オブジェクトの 2 つの辞書、ArrayList、およびいくつかのブール値、int、および文字列を格納しました。

iOSでこれを行う正しい方法を教えてもらえますか? すべての辞書、配列リスト、およびその他のデータを保持するシングルトン クラスを調べましたが、このシングルトンはアプリの実行中ずっとメモリ内に存在することを読みました。Android では、Application クラスは非アクティブ状態がしばらく続くとガベージ コレクションされることがあるため、リロードする必要がありました。iOS で、このシングルトン クラスがアプリの存続期間全体にわたってメモリ内に存在する場合、メモリの使用量が多すぎることを心配する必要がありますか? これらのオブジェクトをシリアル化してディスクに保存し、必要に応じて再作成する必要がありますか?

4

1 に答える 1

3

android.app.ApplicationiOS の App Delegate ( UIApplicationDelegate) に似ています。アプリ デリゲートの特定のメソッドは、アプリケーションの状態が変化したときに呼び出されます。次のメソッドを確認してください。

- (void)applicationWillTerminate:(UIApplication *)application;
- (void)applicationDidEnterBackground:(UIApplication *)application;

最初のものは、アプリケーションがバックグラウンドになく、閉じられようとしているときに呼び出され (Tommy のコメントを参照)、後者はバックグラウンドに移行している場合に呼び出されます。変更があった場合、アプリがバックグラウンドに入るたびに、データを永続的なストレージにシリアル化することをお勧めします。

後で、呼び出し[[UIApplication sharedApplication] delegate]て結果をカスタム サブクラスにキャストすることで、カスタム App Delegate への参照を取得できます。また、App Delegate にデータを直接保存するのではなく、デリゲートが参照するモデル オブジェクトに保存することをお勧めします (これにより、物事が少しきれいに保たれ、柔軟性が向上するはずです)。

于 2012-10-15T21:09:15.660 に答える