1

を介してエンティティと対多Companyの関係を持つエンティティがあるとします。Employeeemployees

最後に作成されたものを見つけたい場合(プロパティがあるEmployeeと仮定します)、これら 2 つのアプローチのどちらが優れていますか?EmployeeNSDatecreated

  • でを作成NSFetchRequestEmployee、 に制限し"company == %@", someCompany、 で並べ替え、を 1createdに設定しますfetchLimit
  • または on と一緒に on を使用sortedArrayUsingDescriptors:someCompany.employeesNSSortDescriptorcreated最初に使用しますか?

2 番目のアプローチはより単純に見えますが、実際の処理が気になります。最初のアプローチでは、システムがカスタム クエリを調整できるようになりますが、2 番目のアプローチではメモリ内の並べ替えが行われますか? 要するに、多対多の関係が怠惰であるかどうかにかかっていると思います。

4

2 に答える 2

2

私の個人的な経験では、最初のアプローチをとります。

まず、2 番目のような 2 つの手順を実行する必要はありません。さらに、フェッチ要求で取得する要素を完全に制御できます (フェッチ制限を 1 に設定します) (たとえば、setPropertiesToFetchCore Data を使用して取得するプロパティを指定し、フォールトを発生させるよう委任できます)。

次に、someCompany.employeesフォールトであるいくつかのオブジェクト (たとえば 20) を取得します (最初にそれらのスケルトンを取得します) が、それらはメモリ内にあり、それを占有します。ソート記述子を適用すると (おそらく、その時点で何らかの障害が発生する可能性があります)、19 個のオブジェクトがメモリ内にありますが、アプリケーションのライフサイクルには役に立ちません。

個人的なメモ

私が優れたプログラマーであっても、Core Data フレームワークの最適化を信頼し、最初の方法を採用します。:-)

それが役に立てば幸い。

于 2012-05-27T11:06:08.760 に答える
0

Core Data は、このタイプの関係に遅延読み込みを使用します。したがって、最初のアプローチの方が優れているようです。ただし、データベースに多くのレコードを入力し、両方をテストすることをお勧めします。Core Data Performance セクションもお読みください。

于 2012-05-27T09:14:29.767 に答える