对于通过 self 或仅通过名称访问实例变量(在类内部工作时)之间的区别,我有些困惑。
例如,参加这个课程:
//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'd。
说它是这样的,根据这个例子:
//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
会有什么区别?
编辑:每个用户回答的第三个示例:说 iVar 不是 IBOutlet:
//In .h file:
@interface Fake : NSObject {
NSString *mVar;
}
@property (nonatomic, retain) NSString *mVar;
//In .m file:
@synthesize mVar;
mVar = @"";
VS
self.mVar = @"";
还是一样——第一次我们访问的是实际的实例变量,第二次我们实际上是通过自动创建的setter(通过@synthesize)?
谢谢大家!
编辑:响应彼得·霍西的更新......
所以你认为 mVarName 的约定不好?我是从我的 C++ 时代开始的。
但是当你这样做的时候呢?
-(void) someMethod:(int) x
{
x = x;
}
你不能这样做(说'x'也是一个类变量)
但你可以这样做:
-(void) someMethod:(int) x
{
mX = x;
}
但你说最好做:
-(void) someMethod:(int) x
{
self.x = x;
}