“->;”是什么意思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。这非常有帮助。谢谢。