Iphone _属性和self.property之间的区别

Iphone _属性和self.property之间的区别,iphone,objective-c,xcode,ipad,properties,Iphone,Objective C,Xcode,Ipad,Properties,我对处理属性时的适当约定有点困惑。我将通过一个例子来说明我的问题。因此,从下面的示例中,我知道功能上的“self.loan=self.loan+250.00;”与“\u loan=\u loan+250.00;”是相同的还是不同的?我在网上看到了很多教程,它们可能使用这两种方法来访问某个属性,也可能不使用这两种方法。那么,使用_loan和self.loan(我知道self.loan与[self setLoan:]相同)的区别到底是什么呢 \u loan是一个变量,给它赋值没有特别的副作用 sel

我对处理属性时的适当约定有点困惑。我将通过一个例子来说明我的问题。因此,从下面的示例中,我知道功能上的“self.loan=self.loan+250.00;”与“\u loan=\u loan+250.00;”是相同的还是不同的?我在网上看到了很多教程,它们可能使用这两种方法来访问某个属性,也可能不使用这两种方法。那么,使用_loan和self.loan(我知道self.loan与[self setLoan:]相同)的区别到底是什么呢


\u loan
是一个变量,给它赋值没有特别的副作用


self.loan=self.loan+250.00
与编写
[self-setLoan:[self-loan]+250.00]
基本相同,因为调用的方法可能会执行其他操作,而不仅仅是设置或获取变量的值。这些方法所做的额外工作取决于您是编写它们的自定义版本(setter和getter)还是使用
@synthesis
来创建它们,如果使用
@synthesis
,则在
@property
声明中应用哪些属性;简单地说,您正在合成的内容是=对于私有成员,这与下面详细的编码方式类似:

//ClassA.h
@interface ClassA: UIViewController {
    double _loan;
}

@property double loan;
@end

//ClassA.m
@implementation ClassA
@synthesize loan = _loan;

以这种方式编写是一种很好的做法,这样您就可以在类代码中清楚地使用“\u1”来表示您的私有成员,但当将其作为属性公开给其他不应该显示的类时。

在访问属性时,您不应该直接引用变量。在代码中始终选择self.property

如果您使用_属性,您就不会使用getter和setter。在这种情况下,您只是在浪费@synthesis

自助贷款=自助贷款+250.00//附件A


这应该是正确的方法。

大书呆子农场的马克·达尔林普写道。做他所做的几乎从来都不是一个坏主意。可能重复之前500个线程的可能重复。“从不”有点过头了。特别是当您实现自定义getter或setter时,使用属性本身会导致无限递归:-)
//ClassA.h
@interface ClassA: UIViewController {
    double _loan;
}

@property double loan;
@end

//ClassA.m
@implementation ClassA
@synthesize loan = _loan;