Objective-C でプロパティ名はほとんどの場合インスタンス名と同じです。しかし、何かしらの理由でインスタンス名を公開したくない場合、インスタンス名とプロパティ名を変えることができます。

例えば Book クラスに title というインスタンス変数があり、name というプロパティ名にしたい場合は以下のようにします。

@interface Book : NSObject {
  NSString* title;
}
@property NSString* name;
@end

インスタンス変数に title、プロパティ名に name を指定します。

次に @implementation で synthesize を指定する際に、以下のように @synthesize name=title; と指定するのがポイントです。これで name のアクセッサ(setName: , name) が作られます。そのアクセッサ内では title が使われます。また、name にアクセスする際には self.name とかならずアクセッサ経由でアクセスするか、title を使用します。

@implementation Book

@synthesize name=title;

- (void) hoge {
  NSLog("%@", self.name);
}
- (void) dealloc {
  [super dealloc];
  self.name=nil;
}
@end

dealloc 時の注意点は self.name = nil; としてメモリ解放することです。

入門 Objective-C 2.0 (Programmer’s SELECTION)

入門 Objective-C 2.0 (Programmer’s SELECTION)Scott Knaster
¥ 3,360
大型本
翔泳社

関連する投稿