|
|
Log In | Not a Member? |
Contact ADC |
Core Data では 2 つの機能を使用して、オブジェクトグラフが必要以上に大きくならないようにし、エンティティの任意のインスタンスが任意の管理対象オブジェクトコンテキストに 2 回以上現れないようにします。これらの機能はそれぞれ、フォールティングおよび一意化として知られています。
フォールティング
一意化
オブジェクトグラフは必要以上に大きくするべきではありません。理想は、ユーザの現在のニーズに必要な数以上のモデルオブジェクトをメモリ上に保持しないことです。
ユーザが 1 人の従業員に関する詳細を受信して編集できるアプリケーションを考えてみましょう。アプリケーションがメモリに必要とするのは、当該従業員を表すオブジェクトだけです。しかし、従業員には上司や部署との関係があります。これらのオブジェクトにも同様に他の関係があります。オブジェクトグラフが完全であることが要件ならば、1 人の従業員の 1 つの属性を編集するには、会社組織全体を表すオブジェクトを作成する必要があります。Core Data はフォールトを使用することで、そのような事態を回避します。
フォールトとは、プレースホルダオブジェクトであり、まだ永続ストアから取り出されていない、関係を形成するオブジェクトまたはオブジェクトのコレクションを示します。それは関係の対象に該当するクラスのインスタンスですが、その永続変数はまだ初期化されていません。
1 人の従業員を永続ストアから取り出すと、manager(上司)、department(部署)、および reports(報告)の関係がフォールトとして表されます。図 1 に、フォールトで表された従業員の department 関係を示します。これは Department クラスのインスタンスですが、その永続インスタンス変数はまだ設定されていません。
図 1: フォールトとして表された department

ある段階でフォールトオブジェクトへのアクセスがあると、Core Data が自動的に永続ストアからオブジェクトのデータを取り出し、オブジェクトを初期化するので、フォールト処理は透過的です。オブジェクトがフォールトであるかどうかを知る必要がある場合は、そのオブジェクトに isFault メッセージを送ります。このとき、フォールトは実行されません。
状況によっては、アプリケーションの異なる場所で同じデータをさまざまな方法で受信する可能性があります(オブジェクトグラフを自分で管理し、グラフ全体が同時にメモリにある場合、これはあまり問題になりません。特定のオブジェクトへの明示的な参照があるか、オブジェクトに到達するために関係を渡り歩けます)。
たとえば、図 2 に示す状況を仮定してみましょう。同じ部署に所属する 2 人の従業員が 1 つの管理対象オブジェクトコンテキストに受信されましたが、部署は現在のところフォールトとして表されています。
図 2:department オブジェクトの仮説的独立フォールト

永続ストアからすべての部署を受信して、図 2 の各従業員に所属部署を個別に照会し、それによって対応するフォールトが実行されると、状況はさらに複雑になります。管理対象オブジェクトに対応するエントリを、明示的に受信するか、関係の解決を通して受信するたびに、新しい管理対象オブジェクトが作成される可能性があります。その結果、同じ部署を表す複数のオブジェクトが得られます。このシナリオでは、永続ストアの部署エントリを複数の管理対象オブジェクトインスタンスが変更する可能性があるので、結果として、オブジェクトは同じエントリを表しながらも異なる矛盾するデータを含むかもしれません。
一意化は Core Data のメカニズムであり、永続ストアのエントリがアプリケーションの特定管理対象オブジェクトコンテキスト内の 1 つの管理対象オブジェクトにのみ関連付けられることを保証します。一意化により、管理対象オブジェクトコンテキスト内に、Marketing 部門を表すオブジェクトが 1 つだけ作成されます。任意のコンテキストにおいて Marketing Department オブジェクトを参照する管理対象オブジェクトはすべて、同じインスタンスを参照します。つまり、たとえフォールトであっても Marketing のデータについて単独のビューを持つことになります。
そのため、図 2 は架空の話です。2 人の従業員が同じ部署に所属していると定義してあるので、図 3 に示すように、その部署の関係は同じフォールトを参照します。
図 3:同じ部署で働いている 2 人の従業員の一意化されたフォールト

Preliminary Last updated: Tiger
|
Get information on Apple products.
Visit the Apple Store online or at retail locations. 1-800-MY-APPLE Copyright © 2007 Apple Inc. All rights reserved. | Terms of use | Privacy Notice |