私はさまざまな場面でこのキーワードに遭遇しました。私はそれが何をすべきかを知っています。しかし、私は本当にそれをより良く理解したいと思っています。
@NSManaged
について気づいたこと-ドキュメントではなく、繰り返し使用して
@dynamic
とほぼ同等です(これについてはあまり知りません)。Parse SDK
からPFObject
をサブクラス化する必要があります。通常、KVCを使用して、バックエンドとの間で値を読み書きします。@NSManaged
というプレフィックスを付けるとコンパイラがシャットダウンします。正式な定義(コアデータ内Apple Docs):
コアデータは、NSManagedObjectクラスのサブクラスのプロパティの基礎となるストレージと実装を提供します。 Core Dataモデルの属性または関係に対応する管理対象オブジェクトサブクラスの各プロパティ定義の前に@NSManaged属性を追加します。 Objective-Cの@dynamic属性と同様に、@ NSManaged属性はSwiftコンパイラーにプロパティの格納と実装が実行時に提供されることを通知します。ただし、@ dynamicとは異なり、@ NSManaged属性はコアデータサポートでのみ使用可能です。
私はそれから得たもの:
@NSManaged
を含む変数は、 something のコンパイル時チェックから除外されます。
私は正式なドキュメントと他のさまざまなSOこの問題に関する質問を読みました:
@ synthesize vs @dynamic、違いは何ですか?
some 使用すべきシナリオを本能的に認識しています。私は部分的にそれが何をするか知っています。しかし、私が求めているのは、それが何をするのかについてのより純粋な理解です。
さらなる観察:
Parse SDK
のPFObject
は、その値にアクセスするためにKey Value Coding
に依存しています。 PFObject
は、次のアクセサーを提供します。
objectForKey:
let score = results.objectForKey("descriptionOfResult")
//returns the descriptionOfResult value from the results object
setObject:forKey:
results.setObject("The results for a physics exam", forKey: "descriptionOfResult")
//sets the value of descriptionOfResult
私の理解では、@NSManaged
magically は、宣言した変数がget
およびset
への上記のアクセサーを自動的に使用することを理解しています。私はそれがどのようにそれを行うのか(私が理解していることが真実であれば)、そしてそれが他に何でもすることを知りたいです。
はい、実際には@dynamicのように動作します-技術的には同じかもしれません。意味的にはわずかな違いがあります:
@dynamicは、「コンパイラ、プロパティも実装されているかどうかを確認しないでください」と表示します。あなたが見ることができるコードはないかもしれませんが、実行時に動作することを保証します」
@NSManagedは、「コンパイラ、実装を処理するコアデータがあるので、これらのプロパティをチェックしないでください-実行時に存在します」と言います。
@NSManagedは、より狭いバージョンのdynamicである構文糖です:)
https://github.com/KyoheiG3/DynamicBlurView/issues/2
ここで、誰かが@dynamicの動作を望んでいたので、CDなしで@NSManagedを使用しました。
Apple docs では、カスタム管理オブジェクトクラスの場合、プロパティの例を引用しています... 私には違いはないようだ、私は@dynamic
Objective Cでは、@NSManaged
はSwiftの代替品です。
上記の答えは正しいです。これが私の理解です。
@NSManagedは、アプリの実行時に変数が値を取得することを示します。 Coredataは、そのような小道具のゲッターとセッターを自動的に作成します。警告のためにコンパイラを黙らせます。
NSmanagedはNSObjectのサブクラスです。 @NSManagedは、実行時にこれらの小道具に追加のコードが与えられることを意味します。これらのプロパティに加えられた変更を追跡します。