Java 在Objective C中调用方法的语法?
我来自Java世界,所以对我来说都是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
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这里有一个很好的答案来回答你关于性能考虑的问题:我想要的是调用方法的所有语法方法。现在有两种!看起来有些人需要复习一下他们的运行时函数!