“->;”是什么意思objective-c中的符号表示

“->;”是什么意思objective-c中的符号表示,objective-c,Objective C,我一直在看一些代码,发现符号->像obj->method(参数)一样被使用我做了一些研究,发现它基本上与[obj方法:argument]相同但我不确定->实际上是什么或做什么 所以我的问题是,->符号在objective-c中是什么意思?它的意思与c中的struct解引用操作符的意思相同,后者用于通过指针访问struct中的字段: struct mystruct { int field; }; struct mystruct *mystruct = ...; printf("field

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


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

它的意思与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
,则只能从外部访问这些字段

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

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

与C中的意思完全相同;它用于访问C结构中的项。早在很久以前,Objective-C纯粹是作为C预处理器扩展+运行时实现的。类只不过是串联的C结构,预处理器将每个ivar访问转换为
self->ivar

例如,
ivar
self->ivar
做同样的事情(在类的方法中)

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


最后,没有了,再也没有什么比
obj->method(argument)
更好的了。曾经有一个叫做现代语法的失败实验,但它被放弃了,因为这是一种毫无意义的时间浪费。您不能使用
->
调用方法。

@JordiKroon我倾向于不同意这些方法是重复的。这是问->符号是什么意思,而这个问题是问“.”和“->”在C中所代表的同一事物之间的区别,在进入Objective-C之前,你应该先了解它们。@HotLicks我在应用商店中开发了大量的应用程序,我不必了解这是什么。我问这个问题的唯一原因是,3年来我第一次看到它被用于一些开源代码中。所以我不会说在进入客观世界之前需要先学习-c@JoshCaswell可能是有人投了反对票的粗鲁方式吧?+1。请注意,第二种用法并不常见(我个人从未在实际的发货代码中使用过),而且它实际上与第一种用法完全相同。Objective-C对象在内部实现为结构,因此指向对象的指针实际上是指向结构的指针;直到现代运行时,它们都是直结构。现在有一点魔法可以解决脆弱的基类问题(它允许在不需要重新编译子类的情况下将IVAR添加到基类中);您可以向我澄清的一件事是OP声称能够通过
->
调用方法,但是在这种情况下
self
是如何传递给方法的;编译器只是把它当作Objective-C调用吗?是的--不:)--他不能通过这种语法调用方法。不能调用Objective-C方法。可以调用ObjuleC++模块内部的C++方法。“你不能使用->调用方法。”ObjuleC++中的什么?你可以用它来调用C++方法,但不使用Objto-C方法。+ 1。这非常有帮助。谢谢。