在处理属性时,我对于正确的约定感到有些困惑。我将通过一个例子说明我的问题。所以从下面的例子我知道功能上“self.loan = self.loan + 250.00;”与“_loan = _loan + 250.00;”相同还是不是?我在网上看到很多教程,可能会也可能不会使用这两种方法来访问属性。那么使用_loan和self.loan之间究竟有什么区别(我知道self.loan与[self setLoan:]相同)
//ClassA.h
@interface ClassA: UIViewController
@property double loan;
@end
//ClassA.m
@implementation ClassA
@synthesize loan = _loan;
-(void)doSomething{
self.loan = self.loan + 250.00; //Exhibit A
_loan = _loan + 250.00; // Exhibit B
}
答案 0 :(得分:5)
_loan
是一个变量,为其赋值不会产生特殊的副作用。
self.loan = self.loan + 250.00
与编写[self setLoan:[self loan] + 250.00]
基本相同,因为调用的方法除了简单地设置或获取变量的值之外,还可以执行其他操作。这些方法所做的额外事情取决于您是编写它们的自定义版本(setter和getter)还是使用@synthesize
来创建它们,如果使用@synthesize
,您在@property
中应用了哪些属性? {1}}声明。
答案 1 :(得分:0)
当你写出@synthesize loan = _loan;基本上简单地说你正在合成的是=对一个私人成员它将类似于下面编码的冗长方式:
//ClassA.h
@interface ClassA: UIViewController {
double _loan;
}
@property double loan;
@end
//ClassA.m
@implementation ClassA
@synthesize loan = _loan;
最好以这种方式编写它,这样你就可以清楚地在你的类代码中用'_'表示你的私有成员,但是当把它作为一个属性暴露给不应该显示的其他类时。
答案 2 :(得分:-1)
访问属性时,不应使用对变量的直接引用。始终在代码中使用self.property。
如果您使用_property,则不会使用您的getter和setter。在这种情况下,你只是在浪费@synthesize使用。
self.loan = self.loan + 250.00; //展览A
这应该是正确的方法。