_property和自属性之间的区别



我在处理属性时对正确的约定有点困惑。我将通过一个例子来说明我的问题。所以从下面的例子中我知道功能上的"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 
} 
_loan是一个

变量,给它赋值没有特别的副作用。

self.loan = self.loan + 250.00本质上与编写[self setLoan:[self loan] + 250.00]相同,因为调用的方法可以执行其他操作,而不仅仅是设置或获取变量的值。 这些方法所做的额外操作取决于您是编写它们的自定义版本(setter 和 getter)还是使用 @synthesize 来创建它们,以及如果您使用 @synthesize ,则在 @property 声明中应用哪些属性。

当你写出@synthesize loan = _loan; 基本上是简写地说,你正在合成的是 = 对于私人成员来说,这将类似于下面编码的详细方式:

//ClassA.h
@interface ClassA: UIViewController {
    double _loan;
}
@property double loan;
@end
//ClassA.m
@implementation ClassA
@synthesize loan = _loan;

最好以这种方式写出来,这样您就可以清楚地使用"_"来表示类代码中的私有成员,但在将其作为属性公开给不应显示的其他类时。

访问属性时,切勿使用对变量的直接引用。始终在你的代码中采用self.property。

如果你使用_property你就没有使用你的吸气手和二传手。在这种情况下,您只是浪费@synthesize使用。

self.loan = self.loan + 250.00;//图表 A

这应该是正确的方法。

最新更新