[objective-c] @synthesizeと@dynamicの違いは何ですか?



3 Answers

この記事を見てください 。 「実行時に提供されるメソッド」という見出しの下に表示されます。

いくつかのアクセサは、CoreDataのNSManagedObjectクラスで使用されるものなど、実行時に動的に作成されます。 これらの場合にプロパティを宣言して使用したいが、コンパイル時に欠落しているメソッドに関する警告を避けたい場合は、@ synthesizeの代わりに@dynamicディレクティブを使用することができます。

...

@dynamicディレクティブを使うことは、コンパイラに "それを心配しないで、メソッドが途中にある"ことを伝えます。

一方、 @synthesizeディレクティブは、コンパイル時にアクセサメソッドを生成します(「合成とカスタムアクセサの合成」のセクションでは、柔軟性があり、実装されていればメソッドを生成しません)。

Question

@dynamicまたは@synthesize @propertyを実装することの違いは何ですか?




アップルのドキュメントに従って。

クラスの実装ブロックで@synthesizeステートメントを使用して、コンパイラが@property宣言で指定した仕様に一致する実装を作成するように指示します。

@dynamicステートメントを使用して、 @dynamic @property宣言で指定されたアクセサメソッドの実装が見つからない場合、警告を抑制するようにコンパイラに指示します。

詳細情報: -

https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/DeclaredProperty.html




@dynamicは、通常、プロパティが実行時に動的に作成されるときに(前述のように)使用されます。 NSManagedObjectはこれを実行します(その理由はすべてのプロパティが動的です)。これはコンパイラの警告を抑制します。

プロパティを動的に作成する方法の概要については、NSManagedObjectおよびCoreDataを使用しないでください。http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html#// http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html#//apple_ref/doc/uid/TP40008048-CH102-SW1




ドキュメントごとに:

developer.apple.com/library/mac/documentation/cocoa/conceptual/…

@dynamicは、アクセサメソッドが実行時に提供されることをコンパイラに伝えます。

少しの調査で、アクセサーメソッドを提供すると@dynamicディレクティブがオーバーライドされることが分かりました。

@synthesizeはコンパイラにあなたのためのアクセサーを作成するよう指示します(ゲッターとセッター)

@propertyは、アクセサーが作成され、ドット表記または[オブジェクトメッセージ]でアクセスできることをコンパイラーに伝えます。




Related