name
メソッドの外からアクセスする必要がある場合はMyClass
、それにアクセスするためのメソッドを定義する必要があります。(NSString*) name
とというメソッドを書くこともできますが- (void) setName:(NSString*) newName
、プロパティを定義して合成する方が簡単です。
MyClass.hで、プロパティを定義します。文字列の場合、通常は次のようにしますcopy
。
@interface MyClass : NSObject
@property (copy) NSString* name;
@end
MyClass.mでは、引き続き ivar を使用してインターフェイス宣言を使用します。
@interface MyClass () {
NSString *name;
}
@end
ただし、新しいプロパティを合成する必要もあります。これにより、 nameを取得および設定するためのメソッドが作成されます。
@implementation MyClass
@synthesize name = name;
@end
慣例として、ivar の先頭または末尾にアンダースコアを付けるのが一般的です。そのため、インターフェースNSString *_name;
では 、実装では@synthesize name = _name
. これにより、プロパティを意味するときに誤って ivar を使用するのを防ぐことができます。
nameプロパティにアクセスできるようになりました。
MyClass me = [[[MyClass alloc] init] autorelease];
[me setName:@"My name"];
NSLog(@"Name = %@", [me name]);
Objective-C のプロパティは言語の強力な機能ですが、習得しなければならない癖がいくつかあります。"objective-C"、"properties"、"synthesize" の組み合わせを Web 検索してみてください。
それでもコンパイル エラーが発生する場合は、アクセスするコードの部分で質問を編集してくださいname
。