【问题标题】: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-> 开销有什么意义?是否有意义?为什么?

【问题讨论】:

    标签: iphone


    【解决方案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 属性的访问器方法,它可能返回完全不同的东西。
      猜你喜欢
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多