1. ホーム
  2. objective-c

[解決済み] synthesize vs @dynamic、その違いとは?

2022-03-18 20:35:19

質問

を実装するのとでは、どのような違いがあるのでしょうか。 @property@dynamic または @synthesize ?

解決方法は?

synthesizeは、あなたのプロパティにゲッターとセッターのメソッドを生成します。 Dynamic は、ゲッターとセッターのメソッドがクラス自体ではなく、他のどこか(スーパークラスや実行時に提供されるなど)に実装されることをコンパイラに伝えるだけです。

のサブクラスで使用されます。 NSManagedObject (CoreData) や、アウトレットとして定義されていないスーパークラスで定義されたプロパティのアウトレットを作成したい場合などです。

また、@dynamic を使用すると、アクセッサの実装を委任することができます。クラス内でアクセッサを自分で実装する場合は、通常 @dynamic は使用しません。

スーパークラスです。

@property (nonatomic, retain) NSButton *someButton;
...
@synthesize someButton;

サブクラスです。

@property (nonatomic, retain) IBOutlet NSButton *someButton;
...
@dynamic someButton;