4

@synthesize と @dynamic の違いについては以前の投稿があります。

@dynamic の普段の使い方という観点から、dynamic についてもっと知りたいです。

通常、NSManagedObject と一緒に @dynamic を使用します。

// Movie.h
@interface Movie : NSManagedObject {
}
@property (retain) NSString* title;
@end

// Movie.m
@implementation Movie
@dynamic title;
@end

@dynamic の理解によると、実際にはコンパイル時に getter/setter は生成されないため、独自の getter/setter を実装する必要があります。

私の質問は、この NSManagedObject の場合、スーパークラス NSManagedObject のゲッター/セッターの大まかな実装は何ですか?

上記の場合を除いて、 @dynamic を使用する他のケースはいくつありますか?

ありがとう、

4

1 に答える 1

4

@dynamicコンパイラーが現在アクセサーを認識できない場合でも、アクセサーに独自の実装を提供する予定であることをコンパイラーに示します。を省略@dynamicして使用しない場合@synthesize、次の 2 つのいずれかが発生します。

  1. アクセサーの半分しか提供していない場合 (たとえば、readwriteプロパティにセッターがないゲッター)、または GCC を使用している場合、コンパイラは警告を表示します。
  2. Clang を使用してコードをコンパイルしている場合は、適切なアクセサーが自動的に生成されます。(デフォルトでの合成は公式にはサポートされていません。)

@dynamicしたがって、コンパイラが上記のいずれかを実行するのを防ぐのに役立ちます。これは、ランタイム関数のように非常に動的な方法でプロパティを実装する場合にも便利ですが、それが必要になることはめったにありません。

于 2010-12-24T07:48:21.070 に答える