使用点语法调用方法是否可以?

thi*_*cfb 2 variables cocoa-touch objective-c ios

我正在尝试学习如何使用目标C进行开发,并且我在本书中读到,要使用点语法(obj.var)从类中访问ivar,您必须使用@properties实现这些变量,但是我已经尝试过使用它没有为这些变量定义@properties的访问类型,它似乎正常工作.

这种访问如何运作?像Java一样使用它是一个好习惯吗?

例:

ComplexNumber *c1 = [[ComplexNumber alloc]init];
c1.realPart = 3;
c1.imaginaryPart = 2;
Run Code Online (Sandbox Code Playgroud)

ComplexNumber的方法:

- (double)modulus;
-(void)setRadius:(double)aRadius phase:(double)aPhase;
-(void)print;
-(double)realPart;
-(double)imaginaryPart;
-(void)setRealPart:(double)value;
-(void)setImaginaryPart:(double)value;
Run Code Online (Sandbox Code Playgroud)

Cal*_*leb 6

属性只是该类实现某些方法的承诺.点语法简单地转换为对具有适当名称的方法的调用,具体取决于代码的作用:

b = a.foo;          // becomes 'b = [a foo];'
a.foo = b;          // becomes '[a setFoo:b];'
Run Code Online (Sandbox Code Playgroud)

因此,即使这些方法不是属性,您也可以使用点语法来调用方法.如果方法表示像属性一样的东西,例如访问length数组的方法,那么这可能是好的:

len = myArray.length // becomes 'len = [myArray length];'
Run Code Online (Sandbox Code Playgroud)

但大多数情况下你不应该这样做.它需要的东西不是属性,使它看起来像一个属性.它可能会起作用,但它会让看到代码的人(包括未来的人)感到困惑.您绝对不应该使用它来调用具有副作用的方法,因为预期属性访问器不会产生副作用.