Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用点语法调用方法可以吗?_Objective C_Ios_Cocoa Touch_Variables - Fatal编程技术网

Objective c 使用点语法调用方法可以吗?

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

我试图学习如何使用objective 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;

不,这不是一个好的实践,从技术上讲,您可以使用点语法访问零参数方法,但现在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,它将生成前面带有下划线的字段。