我一直在查看一些代码并遇到->
正在使用的符号,就像obj->method(argument);
我做了一些研究一样,发现它基本上是相同的,[obj method:argument];
但我不确定->
实际上是什么或做什么。
所以我的问题是,这个->
符号在objective-c中是什么意思?
我一直在查看一些代码并遇到->
正在使用的符号,就像obj->method(argument);
我做了一些研究一样,发现它基本上是相同的,[obj method: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->method(argument); 一样被使用 我做了一点研究,发现它与[obj方法:参数]基本相同;但我不确定 -> 实际上是什么或做了什么。
所以我的问题是,objective-c 中的 -> 符号是什么意思?
它在 C 中的含义完全相同;它用于访问 C 结构中的项目。回到过去,Objective-C 纯粹是作为 C 预处理器扩展 + 运行时实现的。类只不过是串联的 C 结构,预处理器将每个 ivar 访问转换为self->ivar
.
即ivar
做self->ivar
同样的事情(在类的方法中)。
现在,您可以用来->
戳其他对象的 (@public) ivars。但是不要。这完全破坏了封装,因为 Objective-C 的封装线是在方法接口处绘制的。始终使用设置器/获取器,以便可以观察或覆盖行为。
最后,不,没有什么像obj->method(argument)
了。曾经有一个失败的实验叫做Modern Syntax,但它被放弃了,因为它毫无意义地浪费了时间。你不能->
用来调用方法。