` - >`符号在objective-c中表示什么

时间:2013-02-19 15:20:05

标签: objective-c

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

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

2 个答案:

答案 0 :(得分: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,则只能在外部访问这些字段。

答案 1 :(得分:5)

  

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

     

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

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

即。 ivarself->ivar执行相同的操作(在类的方法中)。

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

最后,不,没有像obj->method(argument)那样的了。曾经有一次名为 Modern Syntax 的失败实验,但它被放弃了,因为这是浪费时间的无意义。您不能使用->来调用方法。