我应该为UIIButton或UILabel属性分配一个= _variable吗?

时间:2012-01-27 05:11:37

标签: objective-c ios properties

你好这里的菜鸟问题。

在我学习期间,我被反复指示在@综合@property

时总是指定一个= _propertyName变量

例如

@property (nonatomic, strong) NSTimer *myTimer;

我愿意

@synthesize myTimer = _myTimer;

现在我的问题是。这对IB物业也必须这样做吗? 比如

@property (nonatomic, strong) IBOutlet UILabel *myLabel;
@property (nonatomic, strong) IBOutlet UIButton *myButton;

我只是在这里做:

@synthesize myLabel;
@synthesize myButton;

或:

@synthesize myLabel=  _myLabel;
@synthesize myButton = _myButton;

现在我可以看到,为什么这对于像NSArray,NSString或BOOL这样的东西很有用,你实际上存储了一些值,但我不知道这个逻辑是如何适用于UIButtons,UILabels等。感谢您的任何指示(没有预期)

4 个答案:

答案 0 :(得分:2)

这是一个偏好的问题。但是,就范围而言,您应该记住一个区别。例如,如果您像这样编写合成器,

@synthesize myTime = _myTime;

并且您属于该类的实例方法的范围,例如,-(void)setTime:(id)myTime;,调用之间存在差异,

self.myTime = newTime;

myTime = newTime;

很明显,第一个更改了对象的实例变量,第二个更改了传入的myTime局部变量作为参数传递给方法setTime:,这是你经常要做的事情不想做。但是,如果你像这样合成了你的实例变量,那么

@syntehsize myTime;

这项任务会发生什么变得更加混乱,

myTime = newTime;

这实际上是重新分配局部变量,可能不是你想要的。因此,在命名变量时,最好坚持使用约定并尽量避免混淆。这就是为什么我个人倾向于分配下划线并始终通过将它们附加到self来设置实例变量。

答案 1 :(得分:1)

这只是一个惯例问题。尝试坚持一个约定,这不仅适用于变量名称,对于您编程的所有内容都是如此。

答案 2 :(得分:0)

  

在我学习期间,我被反复指示在@综合@property

时总是指定一个= _propertyName变量

这只是一个偏好问题。有些人喜欢@synthesize myTimer;,有些人有其他偏好......

  

现在我的问题是。是否必须对IB属性进行此操作?

您必须以某种形式合成或定义方法。除此之外,只需选择一个约定并坚持下去!

答案 3 :(得分:0)

在我看来,“_ var”用于更好地区分getter / setter及其实际相关变量。

如果

@Synthesize myTimer = _myTimer;

受雇。每次都会提醒您是使用setter / getter还是直接访问变量。

e.g。如果使用@Synthesize,那么

self.myTimer = anotherTimer;

相同
[self setMyTimer(anotherTimer)];

同时

_myTimer = anotherTimer;

仅仅是分配变量;

是的,这是一个约定问题,但是如果你想区分调用setter / getter和直接访问变量,应该使用“_var”。它不是,它并不重要。