-1

我一直在查看一些代码并遇到->正在使用的符号,就像obj->method(argument);我做了一些研究一样,发现它基本上是相同的,[obj method:argument];但我不确定->实际上是什么或做什么。

所以我的问题是,这个->符号在objective-c中是什么意思?

4

2 回答 2

6

它的含义与 C 中的解引用运算符相同,用于通过指针struct访问 中的字段:struct

struct mystruct
{
    int field;
};

struct mystruct *mystruct = ...;
printf("field=%d\n", mystruct->field);

在 Objective-C 中,它也可以用于访问 Objective-C 对象中的字段:

@interface MyObj : NSObject
{
@public
    int field;
}
@end

MyObj *myObj = [[MyObj alloc] init];
NSLog(@"field=%d", myObj->field);

请注意,只有声明了这些字段,您才能从外部访问它们@public

于 2013-02-19T15:23:19.170 回答
5

我一直在查看一些代码并遇到符号 -> 像 obj->method(argument); 一样被使用 我做了一点研究,发现它与[obj方法:参数]基本相同;但我不确定 -> 实际上是什么或做了什么。

所以我的问题是,objective-c 中的 -> 符号是什么意思?

它在 C 中的含义完全相同;它用于访问 C 结构中的项目。回到过去,Objective-C 纯粹是作为 C 预处理器扩展 + 运行时实现的。类只不过是串联的 C 结构,预处理器将每个 ivar 访问转换为self->ivar.

ivarself->ivar同样的事情(在类的方法中)。

现在,您可以用来->戳其他对象的 (@public) ivars。但是不要。这完全破坏了封装,因为 Objective-C 的封装线是在方法接口处绘制的。始终使用设置器/获取器,以便可以观察或覆盖行为。

最后,不,没有什么像obj->method(argument)了。曾经有一个失败的实验叫做Modern Syntax,但它被放弃了,因为它毫无意义地浪费了时间。你不能->用来调用方法。

于 2013-02-19T16:55:53.730 回答