0

Apple の Core Data Programming Guide から:

Core Data は、マネージド オブジェクト クラスの効率的なパブリックおよびプリミティブの get および set 属性アクセサー メソッドと関係アクセサー メソッドを動的に生成します。

...

プリミティブ アクセサー メソッドは、コア データがデータにアクセスするための最も基本的なデータ メソッドとして使用することを除いて、「通常の」または公開キー値コーディング準拠のアクセサー メソッドに似ています。その結果、キー値アクセスを発行したり、通知を監視したりしません。別の言い方をすれば、primitiveValueForKey: および setPrimitiveValue:forKey: に対するものであり、valueForKey: および setValue:forKey: に対するパブリック アクセサ メソッドとは何ですか。

プリミティブ アクセサー メソッドは、KVO 通知をトリガーしないため、パブリック アクセサーよりも優れたパフォーマンスを発揮することが期待されます。この理論を Time Profiler で効果的にテストする方法はありますか? (確かに、2 つの呼び出しを独自の for ループに入れ、何億回も反復して結果を比較するほど簡単なことはありません...)

明らかに、プリミティブ アクセサーは、マネージド オブジェクト サブクラスの外部のオブジェクトまたは関数によって呼び出されるべきではありませんが、クラス内からそれらを使用すべきでない場合はどのような場合でしょうか?

4

1 に答える 1

1

edelaney05、

ご存知のように、Core Data は Objective-C の KVC/KVO 機能に依存しています。はい、パスの長さがアクセサーを介してわずかに長いことは正しいです。それの何?Core Data のパフォーマンスは、I/O サブシステムのパフォーマンスによって支配されます。

IOW、フェッチ要求を調整することは、アクセサーのオーバーヘッドを回避することよりもはるかに重要です。あなたが提案していることを実行できますか?はい。あなたはすべきですか?いいえ、IMO は、データを効率的に MOC に取り込む方法に焦点を当て、述語やその他のフィルター手法を使用してそれを洗練する必要があります。パフォーマンスの高い CD コードを作成するには、フェッチ後にさまざまなキー パス演算子と述語言語を使用する方法を学習することが非常に重要です。アクセサーでかなりの時間を費やしていることをインスツルメンツが文書化した後でのみ、アクセサーを回避する戦略を検討します。

特定の質問への回答として、一般に、プリミティブ アクセサーの使用をパブリック アクセサーの再実装内に制限する必要があります。すべてのコードのアクセサーに固執することが、標準パターンになります。これにより、任意の動作を任意のプロパティに関連付けることができるという長期的なエンジニアリング上の利点が得られます。最後に、さまざまなキー パスと set 演算子を使用できる場合、CD チームはそれらのアクセス パターンを既に最適化しています。それらは非常に高性能です。

アンドリュー

于 2012-12-21T12:24:24.223 に答える