@property
と を使用している理由を教えてください@synthesis
。どこで使用する必要があります@dynamic
か? ありがとうございました。
3 に答える
プロパティ
前にキャプションとオーサーのアクセサ メソッドを書いたとき、コードが単純で、おそらく一般化できることに気づいたかもしれません。
プロパティは、アクセサーを自動的に生成できるようにする Objective-C の機能であり、その他の副次的な利点もあります。Photo クラスをプロパティを使用するように変換しましょう。
以前は次のように表示されていました: #import
@interface Photo : NSObject {
NSString* caption;
NSString* photographer;
}
- (NSString*) caption;
- (NSString*) photographer;
- (void) setCaption: (NSString*)input;
- (void) setPhotographer: (NSString*)input;
@end
プロパティに変換すると、次のようになります。
#import <Cocoa/Cocoa.h>
@interface Photo : NSObject {
NSString* caption;
NSString* photographer;
}
@property (retain) NSString* caption;
@property (retain) NSString* photographer;
@end
@property は、プロパティを宣言する Objective-C ディレクティブです。括弧内の「retain」は、セッターが入力値を保持する必要があることを指定し、行の残りの部分は単にプロパティのタイプと名前を指定します。
それでは、クラスの実装を見てみましょう。
#import "Photo.h"
@implementation Photo
@synthesize caption;
@synthesize photographer;
- (void) dealloc
{
[caption release];
[photographer release];
[super dealloc];
}
@end
@synthesize ディレクティブはセッターとゲッターを自動的に生成するので、このクラスに実装する必要があるのは dealloc メソッドだけです。
@synthesize は、プロパティのゲッター メソッドとセッター メソッドを生成します。@dynamic は、getter メソッドと setter メソッドがクラス自体ではなく別の場所で実装されていることをコンパイラに伝えるだけです。
@property と @synthesis は連携して動作し、setter と getter を自動的に定義するのに役立ちます。xcode 4.5 では、@synthesis は必要ありません。コンパイラが自動的に追加します。
@property
の宣言ですaccessors
。それはただの宣言です。これらの違いはほとんどありません。ここをチェック