2

我正在尝试学习如何使用目标 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;
4

2 回答 2

6

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

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

因此,即使这些方法不是属性,您实际上也可以使用点语法来调用方法。如果该方法表示像属性一样工作的东西,例如访问length数组的方法,那可能还不错:

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

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

于 2012-10-22T19:32:23.793 回答
4

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

方括号语法应该用于调用方法。

于 2012-10-22T19:23:22.017 回答