私は、自分自身を介してインスタンス変数にアクセスするか、名前だけでインスタンス変数にアクセスするか(クラス内で作業する場合)の違いについて混乱しています。
たとえば、次のクラスを取り上げます。
//In .h file:
@interface Register : NSObject {
NSString *mName;
}
- (id) initWithName:(NSString *) name;
//In .m file:
- (id) initWithName:(NSString *)name
{
if (self == [super init])
{
mName = name;
}
return self;
}
経由でインスタンス変数にアクセスすることの違いは何ですか
self.mName = name;
対
mName = name;
これは @property ではなく、@sythenize されていません。
ただし、この例では次のようになります。
//In .h file:
@interface Manange_My_ViewsViewController : UIViewController {
IBOutlet UILabel *countLabel;
}
@property (nonatomic, retain) IBOutlet UILabel *countLabel;
//In .m file:
@synthesize countLabel;
- (void) updateLabel:(NSUInteger)count
{
countLabel.text = [NSString stringWithFormat:@"%d", count];
}
しかし、countLabel に次のようにアクセスしたとします。
self.countLabel
違いは何ですか?
編集: ユーザーの回答ごとの 3 番目の例: iVar が IBOutlet ではなかったとします:
//In .h file:
@interface Fake : NSObject {
NSString *mVar;
}
@property (nonatomic, retain) NSString *mVar;
//In .m file:
@synthesize mVar;
mVar = @"";
VS
self.mVar = @"";
それとも同じですか - 最初に実際のインスタンス変数にアクセスし、2 番目に (@synthesize を介して) 自動作成されたセッターを実際に通過しますか?
皆さんありがとう!
編集:Peter Hoseyに応じて更新...
では、mVarName の慣例は悪いと思いますか? 私はC++時代からそれを取りました。
しかし、あなたがそうする場合はどうですか?
-(void) someMethod:(int) x
{
x = x;
}
それはできません(「x」もクラス変数であるとします)
しかし、次のことができます。
-(void) someMethod:(int) x
{
mX = x;
}
しかし、あなたの言うことは、次のことを行う方が良いです:
-(void) someMethod:(int) x
{
self.x = x;
}