Objective-C のプロパティとインスタンス変数についてかなり混乱しています。
私は、Aaron Hillegass の「Mac OS X 用の Cocoa プログラミング」の半分ほど読み終えたところで、すべてが論理的です。次のようなクラスを宣言します。
@class Something;
@interface MyClass : NSObject {
NSString *name;
NSArray *items;
Something *something;
IBOutlet NSTextField *myTextField;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSArray *items;
他のオブジェクトは変数
name
とitems
インスタンス変数を操作する必要があるため、@property
/を使用@synthesize
してそれらのアクセサー/ミューテーターを生成します。クラス内では、アクセサー/ミューテーターは使用しません。インスタンス変数を直接操作するだけです。something
クラスで使用する単なるインスタンス変数であり、他の誰もそれを使用する必要がないため、アクセサーとミューテーターのペアを作成しません。UI でテキスト フィールドを操作する必要があるため、 を宣言し
IBOutlet
て接続すれば完了です。
すべて非常に論理的です。
しかし、iPhone の世界では事情が異なるようです。人々はすべての単一インスタンス変数のプロパティを宣言し、 のプロパティを宣言し、アクセサ/ミューテータを使用してクラス内IBOutlets
のインスタンス変数とやり取りします(たとえば、ではなく書き込みます)。[self setName:@"Test"]
name = @"Test"
なんで?何が起こっている?これらの違いは iPhone 固有のものですか? すべてのインスタンス変数のプロパティを宣言すること、 のプロパティを宣言することIBOutlets
、および独自のクラス内でアクセサー/ミューテーターを使用することの利点は何ですか?