你好这里的菜鸟问题。
在我学习期间,我被反复指示在@综合@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等。感谢您的任何指示(没有预期)
答案 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”。它不是,它并不重要。