誰かがcoredataの障害が何を意味するのか説明できますか?それがメモリを減らすメカニズムだと理解しました。しかし、私の質問は、障害のあるオブジェクトを使用しようとしたときに、更新メソッドを呼び出す必要があるのか、それともCoreDataが値を選択するのかということです。CoreDataがそれを処理する場合、障害が発生したオブジェクトが実際の永続ストアから削除され、障害が発生したオブジェクトを介してアクセスしようとするとどうなりますか?例外をスローしますか?
3 に答える
Core Dataでは、障害はプレースホルダー、つまり「未実現オブジェクト」です。これらは、必要な場合にのみメモリにフェッチされる他のNSManagedObjectsを参照する小さなオブジェクトです。この障害メカニズムは、パフォーマンスを向上させ、メモリ使用量を削減するように設計されています。
一般に、障害メカニズムは透過的です。NSManagedObjectContext(MOC)からオブジェクトを取得する場合、それが障害であるか実現されたオブジェクトであるかを(通常の使用過程では)判断できません。障害は、ほとんどの場合、オブジェクトのプロパティにアクセスするときなど、必要な場合にCore Dataフレームワークによって自動的に実現されたオブジェクト(「発生」)に変換されます。自分で障害を発生させる必要がある場合は、nil引数を指定してwillAccessValueForKey:メソッドを呼び出すことで発生できます。
Dhruvからの素晴らしい答え!最後の質問への回答として、最初に障害が発生してから削除された管理対象オブジェクトにアクセスしようとすると、NSObjectInaccessibleExceptionと「CoreDataが障害を実行できませんでした」というメッセージが表示されます。
Coredataリファレンス(リンク)から:
障害が発生すると、アプリケーションが消費するメモリの量が減少します。障害とは、まだ完全には実現されていない管理対象オブジェクトを表すプレースホルダーオブジェクト、または関係を表すコレクションオブジェクトです。