【发布时间】: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