Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.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
Iphone Objective-c->结构运算符_Iphone_Ios_Objective C_C_Cocoa - Fatal编程技术网

Iphone Objective-c->结构运算符

Iphone Objective-c->结构运算符,iphone,ios,objective-c,c,cocoa,Iphone,Ios,Objective C,C,Cocoa,在阅读一些教程时,我第一次发现了structure操作符,我读到它是用来表示instace变量的 -(void)setNumber:(int)n{ self.number = n; } -(void)setNumber:(int)n{ self->number = n; } 我的疑问是:它到底在做什么?我什么时候用?为什么我更喜欢它而不是点符号 Objective-C中的点语法只是语法糖,编译器用方法调用替换它。->取消对指针的引用并直接访问成员,而无需调用方法 在Obje

在阅读一些教程时,我第一次发现了structure操作符,我读到它是用来表示instace变量的

-(void)setNumber:(int)n{
   self.number = n;
}

-(void)setNumber:(int)n{
   self->number = n;
}

我的疑问是:它到底在做什么?我什么时候用?为什么我更喜欢它而不是点符号

Objective-C中的点语法只是语法糖,编译器用方法调用替换它。->取消对指针的引用并直接访问成员,而无需调用方法


在Objective-C方法调用中,您不需要说self->foo,如果您的类有一个名为foo的实例变量,编译器将推断它的self->部分。因此,虽然并非完全没有听说过,但在Objective-C对象中使用->的情况相对较少。

Objective-C中的点语法只是语法糖,编译器通过方法调用将其替换。->取消对指针的引用并直接访问成员,而无需调用方法

在Objective-C方法调用中,您不需要说self->foo,如果您的类有一个名为foo的实例变量,编译器将推断它的self->部分。因此,虽然并非完全没有听说过,但在Objective-C对象中使用->的情况相对较少。

箭头->操作符直接访问实例变量,这通常是不希望的,因为它违反了封装并绕过了可能成为潜在问题源的访问器方法,比如KVO不工作或者一些期望的副作用没有发生

相反,您几乎应该始终使用.,因为它使用getter和setter访问属性。

箭头->运算符直接访问实例变量,这通常是您不希望的,因为它违反了封装,并绕过了可能成为潜在问题源的访问器方法,比如KVO不工作或者一些期望的副作用没有发生


相反,您几乎应该始终使用.,因为它使用getter和setter来访问属性。

请记住,Objective-C是在C之上构建的,所有的C语法都会显示出来。基本上,->的C语义没有改变,而是被带入了Objective-C,而额外的语义被重载到了,。与该标记在C中的含义相比。在尝试学习/使用Objective-C之前,您需要至少对C有一个基本的了解。请记住,Objective-C是建立在C之上的,所有的C语法都显示出来了。基本上,->的C语义被继承到Objective-C中,没有改变,而额外的语义被重载到,。而这个标记在C中的意思是什么。在你尝试学习/使用Objective-C之前,你需要至少对C有一个基本的了解。为什么他们不删除这种语法?它只会导致Trubles仍然合法使用直接访问非自身实例的实例变量-例如,在实现NSCopying时很有用,更不用说->在C中仍然有大量合法使用,其中Objective-C是一个严格的超集。他们为什么不删除这种语法?它只会导致truble仍然合法使用直接访问非自身实例的实例变量-例如,在实现NSCopying时很有用,更不用说->在C中仍然有大量合法使用,其中Objective-C是一个严格的超集。OP发布了一个访问器方法实现的示例。在这些情况下,直接访问ivar是正确和常见的。在某些情况下,需要使用箭头符号,并且有意义。此外,Objective-C是C的严格超集,不能删除C功能。@请参阅ipmcc关于NSCopying的评论。实现isEqual:或compare:是类似的情况。@NikolaiRuhe即使在访问器方法中也不需要箭头运算符。在任何实例方法中,都可以访问ivar,而无需将其作为self->ivar引用。此外,这个答案在技术上是正确的,因此您的下一票是无效的。@H2CO3箭头运算符完全可以在访问器中使用,就像在其他任何地方一样。OP发布了一个访问器方法实现的示例。在这些情况下,直接访问ivar是正确和常见的。在某些情况下,需要使用箭头符号,并且有意义。此外,Objective-C是C的严格超集,不能删除C功能。@请参阅ipmcc关于NSCopying的评论。实现isEqual:或compare:是类似的情况。@NikolaiRuhe即使在访问器方法中也不需要箭头运算符。在任何实例方法中,都可以访问ivar,而无需将其作为self->ivar引用。此外,这个答案在技术上是正确的,因此您的下一票是无效的。@H2CO3箭头运算符完全可以在访问器中使用,就像在其他任何地方一样。