Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Objective C中调用方法的语法?_Java_Iphone_Objective C_Ios - Fatal编程技术网

Java 在Objective C中调用方法的语法?

Java 在Objective C中调用方法的语法?,java,iphone,objective-c,ios,Java,Iphone,Objective C,Ios,我来自Java世界,所以对我来说都是object.foo(),但在Objective C中,对象消息传递是调用方法的唯一方式吗 [object foo]; 对。您可以使用点语法来获取或设置Objective C属性。例如,在UILabel*标签上设置文本可以是[label setText:@“some text”]或label.text=@“一些文本”首先想到的是使用@property和点表示法。名为“foo”的@property类允许您执行以下操作: anInstance.foo = @"b

我来自Java世界,所以对我来说都是
object.foo()
,但在Objective C中,对象消息传递是调用方法的唯一方式吗

[object foo];

对。您可以使用点语法来获取或设置Objective C属性。例如,在UILabel*标签上设置文本可以是
[label setText:@“some text”]
label.text=@“一些文本”

首先想到的是使用@property和点表示法。名为“foo”的@property类允许您执行以下操作:

anInstance.foo = @"bar";
它在编译时字面上翻译为

[anInstance setFoo:@"bar"];
(与“getter”类似)


其他方法更高级,例如使用NSObject的performSelector:method或其他系统,如NSInvocation等。更深入地说,有一些方法可以在运行时使用c函数调用方法(所有这些语法最终归结为调用c函数);但我相信这不是你想要的。

看在学究的份上,为什么不做些低级的:

objc_msgSend(object, sel_getUid("foo"), errVar);
您可以使用KVC:

 [label setValue:@"Some text" forKey:@"text"];

在label->setText(“一些文本”)中,如何处理
->
?请参见这里的->点表示法非常简单,至少对于属性而言,用括号表示更为简单;-)@ctrahey的链接很好。如前所述,foo->bar访问foo指向的C结构的bar成员。不涉及Objective-C,这也不是调用方法的方法。对象实例变量可以通过这种方式访问,因为Objective-C中的对象基本上只是结构,它们的IVAR是结构的成员。在使用
[]
而不是
时,是否有性能方面的考虑?实际上,您使用了短语“对象消息传递是调用方法的唯一方式吗?”,因此,技术上的答案是“不”。消息传递转换为运行时函数调用,您也可以使用它们。事实上,您已经提到了运行时的一个核心“特性”,即消息到方法的动态绑定。对于发送的每一条消息,都会在运行时查找“方法”(或者更准确地说是实现)。检查一下:当程序实际运行时,它们实际上是相同的。我是说字面意思。@RaffiM这里有一个很好的答案来回答你关于性能考虑的问题:我想要的是调用方法的所有语法方法。现在有两种!看起来有些人需要复习一下他们的运行时函数!