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

时间:2012-10-22 19:17:29

标签: objective-c ios cocoa-touch variables

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

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

示例:

ComplexNumber *c1 = [[ComplexNumber alloc]init];
c1.realPart = 3;
c1.imaginaryPart = 2;

ComplexNumber的方法:

- (double)modulus;
-(void)setRadius:(double)aRadius phase:(double)aPhase;
-(void)print;
-(double)realPart;
-(double)imaginaryPart;
-(void)setRealPart:(double)value;
-(void)setImaginaryPart:(double)value;

2 个答案:

答案 0 :(得分:6)

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

b = a.foo;          // becomes 'b = [a foo];'
a.foo = b;          // becomes '[a setFoo:b];'

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

len = myArray.length // becomes 'len = [myArray length];'

但大多数情况下你不应该这样做。它需要属性并使其看起来像属性。它可能会起作用,但它会让看到代码的人(包括未来的人)感到困惑。你肯定不应该用它来调用有副作用的方法,因为预期属性访问器不会产生副作用。

答案 1 :(得分:4)

不,这不是一个好习惯,你在技术上可以使用点语法访问零参数方法,但现在Xcode会警告你这样做。这违反了Apple的编码指南。

Bracket语法应该用于调用方法。