Objective c 使用点语法调用方法可以吗?
我试图学习如何使用objective C进行开发,我在这本书上读到,要从使用点语法(obj.var)的类访问ivar,必须使用@properties实现这些变量,但是我尝试过使用这种访问,但没有为这些变量定义@properties,它似乎工作正常 这种访问是如何工作的?像在Java中一样使用它是一种好的实践吗 例如:Objective c 使用点语法调用方法可以吗?,objective-c,ios,cocoa-touch,variables,Objective C,Ios,Cocoa Touch,Variables,我试图学习如何使用objective C进行开发,我在这本书上读到,要从使用点语法(obj.var)的类访问ivar,必须使用@properties实现这些变量,但是我尝试过使用这种访问,但没有为这些变量定义@properties,它似乎工作正常 这种访问是如何工作的?像在Java中一样使用它是一种好的实践吗 例如: ComplexNumber *c1 = [[ComplexNumber alloc]init]; c1.realPart = 3; c1.imaginaryPart = 2; C
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;
不,这不是一个好的实践,从技术上讲,您可以使用点语法访问零参数方法,但现在Xcode会警告您这样做。这违反了苹果的编码准则
括号语法应该用于调用方法。属性只是类实现某些方法的承诺。根据代码所做的工作,点语法简单地转换为对具有适当名称的方法的调用:
b = a.foo; // becomes 'b = [a foo];'
a.foo = b; // becomes '[a setFoo:b];'
因此,即使方法不是属性,也可以使用点语法调用方法。如果该方法表示类似于属性的内容,例如访问数组的length
方法,则可以这样做:
len = myArray.length // becomes 'len = [myArray length];'
但大多数情况下你不应该这么做。它获取一些非属性的东西,并使其看起来像属性。它可能会起作用,但它会让那些看代码的人(包括未来的你)感到困惑。您绝对不应该使用它来调用具有副作用的方法,因为属性访问器不应该具有副作用。ComplexNumber类中声明了哪些方法?编辑问题以插入它们!你是说,像这样<代码>[c1打印]否,并且您不需要使用@synthesis-xcode,它将生成前面带有下划线的字段。