这个 -> 符号是啥意思?

Posted

技术标签:

【中文标题】这个 -> 符号是啥意思?【英文标题】:What does this -> symbol mean?这个 -> 符号是什么意思? 【发布时间】:2009-10-14 10:23:51 【问题描述】:

在我看到一个使用 -> 而不是点符号的 iPhone SDK 的代码 sn-p 之后,我现在有点困惑。它看起来很像 php,但它确实可以在 iPhone 上运行。谁能解释一下 -> 是怎么回事,我应该知道一些深层的 C 机密吗?

例子:

- (void)setFileURLs: (NSArray*)elements 
    if (self->fileURLs != elements)

fileURLs 是一个实例变量或属性,如下所示:

@property(nonatomic, retain) NSArray *fileURLs;

还有一个用于文件 URL 的 @synthesize。 现在我认为是这样的:因为这是 fileURL 的 setter 方法,所以使用点符号来访问实例变量会很糟糕。事实上,当我这样做时,应用程序崩溃了。那是因为它一遍又一遍地调用自己,因为点符号访问访问器方法而不是直接访问 ivar。但是 -> 将直接访问 ivar。

如果那是对的,那么问题会有所改变:为什么要写“self->fileURLs”而不仅仅是“fileURLs”?在它前面添加 self-> 开销有什么意义?是否有意义?为什么?

【问题讨论】:

【参考方案1】:

a->b 只是写(*a).b 的另一种方式。这是一种访问结构字段或指针引用的对象的实例变量的方法。

【讨论】:

【参考方案2】:

请参阅“其他运营商”部分:

http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

由于self 是一个指针,你必须使用-> 而不是. 来访问它的成员。在self 引用前面加上fileURLs 可能只是作者使用的一种编码风格(相当于写this.member)。

【讨论】:

除了因为定义了一个属性,self.fileURLs 就可以正常工作......似乎有人习惯于使用 Objective-C 进行 C++。 self->fileURLs 正在访问成员变量(如 mouviciel 上面指出的)。 self.fileURLs 正在运行 fileURLs 属性的访问器方法,它可能返回完全不同的东西。

以上是关于这个 -> 符号是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

iOS,这个符号( ...something in it...)是啥意思?

这个符号在 C++ 中是啥意思? [复制]

参考——这个符号在 PHP 中是啥意思?

参考——这个符号在 PHP 中是啥意思?

参考——这个符号在 PHP 中是啥意思?

参考——这个符号在 PHP 中是啥意思?