_property和self.property之间的区别

时间:2012-06-04 22:20:51

标签: iphone objective-c xcode ipad properties

在处理属性时,我对于正确的约定感到有些困惑。我将通过一个例子说明我的问题。所以从下面的例子我知道功能上“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 
} 

3 个答案:

答案 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

这应该是正确的方法。