2016-11-22 10 views
1

この質問は、技術的な問題ではなく、むしろアプローチです。データを保存するなどシングルトン対コアデータ

1)を使用して管理、データ所有者:

私はあなたのアプリケーションでは、サーバから受信したデータを格納するための2つの以下の一般的なアプローチを知っています。ほとんどの場合、シングルトンの一種であり、サーバーから受信したモデルを格納するために使用されます。 (例:投稿/場所/ユーザーの配列)任意の画面からデータにアクセスするには、シングルトンが必要です。私はアプリの大部分がこのアプローチを使用していると思います。

2)コアデータ(またはレルム)をメモリ内ストレージとして使用する。このアプローチはシングルトンを避けていますが、維持してサポートするのは少し複雑です(そしてクラッシュする危険性があります)。

データを保存する方法とその理由を教えてください。

P.S.どんな答えでも役立ちます。しかし、理由があるので詳細なものについては大きな「ありがとう」があります。

答えて

2

CoreDataは厳密に「メモリ内」ではありません。オブジェクトをデータ・モデルにロードしてコンテキストに保存し、実際にはディスク上やメイン・メモリ上に存在し、フェッチ・リクエストによって簡単に戻すことができます。

シングルトンは、通常、ユーザーがアプリを終了するまで、常にメインメモリに常駐します。より大きなオブジェクトをいくつかのデータ構造に格納している場合(例えば、本当に必要なものがサムネイルであった場合など、フル解像度の画像など)、これはかなりのリソースになる可能性があります。

6

Core Data/Relam/Sharkまたは他のiOS ORMを使用する理由は、主にのために、アプリケーションの実行間にデータを維持することです()。

現在のところ、単一の値と非常に小さい(私が推奨するものではない)オブジェクトの場合は、UserDefaultsを使用してアプリの起動間隔を維持する方法は2通りあります。コアデータとSharkORMの場合、データベースに近いアプローチの場合、SQLiteの上に構築されているため、ORMを使用する必要があります。

データモデルの配列を格納するためにマネージャを使用すると、そのモデルはアプリケーションの存続期間中のみ保持されます。たとえば、ユーザーが強制的にアプリを終了したり、端末を再起動したり、iOSがアプリを終了した場合には、すべてのデータが永久に失われます。これは、ディスク自体のデータベースではなく、揮発性メモリであるRAMに格納されているためです。

起動の間に永続性を特に必要としない場合でも、データベースレイヤーを使用すると利点があります。 SharkORMを使用すると、組み込みの強力なクエリービルダーを使用したくない場合に、オブジェクトに対して生のSQLクエリーを実行できます。これは、ローカル配列を反復処理するのではなく、関心のあるモデルを素早く取得するのに便利です。

ご質問には、私はデータを保存するにはどうすればいいですか? まあ、私は3つすべての組み合わせを使用します。たとえば、そこに表示したいデータのためにAPIを呼び出し、ユーザーに表示するには、データモデルを保持する配列を持つマネージャインスタンスを使用します。 しかし、私が後でそのデータを保存したい場合、またはその上で複雑なクエリを実行する必要がある場合は、私はSharkを使用してディスクに保存します。 しかし、ユーザーが搭乗している私の流れを見たかどうかを保存したいのであれば、ブール値をそのままUserDefaultsに残しておきます。

これは十分詳細です。

+0

ありがとうございます。私がしようとしていることは、自分自身で決定したいということです。シングルトンを避けるために、Core Dataを(アプリケーション起動の間にデータを保持する必要なしに)使用したいのですか?または、コアデータ(または他のorm)の管理に多大な労力を要するため、シングルトンは大丈夫です。 – Evgeniy

+1

シングルトンの使用を取り巻くいくつかの論争がありますが、経験豊富なiOS開発者としての私の意見は次のとおりです。シングルトンはうまくあり、データソース/マネージャーの役​​割にとっては最高の解決策です。インスタンスは1つしかないので、素敵で軽量に保たれ、データはそこにあり、簡単にアクセスできます。メモリー内にシングルトンを保持するよりもはるかにリソースを集中させる必要がない場合、ディスクからデータを読み取る必要がある場合(RAMよりもはるかに遅い)、余分なオーバーホールを加えるべきではありません。ただし、オブジェクトの配列が完了したら、オブジェクトの配列を空にします。 –

+0

私の経験は正反対で、シングルトンは定義上のメモリリークであり、怠惰なプログラマはオブジェクトの寿命について考える必要がないようにそれらを使います。プロのコードでは受け入れられません。割り当て解除できないref countループを導入することなく、アプリケーションデリゲートからオブジェクトへの参照をハングすることで、同じ結果を得ることができます – MoDJ

関連する問題