【发布时间】:2012-06-17 04:14:40
【问题描述】:
我来自 Java 世界,所以对我来说都是 object.foo(),但在 Objective C 中,对象消息传递是调用方法的唯一方法吗?
[object foo];
【问题讨论】:
标签: java iphone objective-c ios
我来自 Java 世界,所以对我来说都是 object.foo(),但在 Objective C 中,对象消息传递是调用方法的唯一方法吗?
[object foo];
【问题讨论】:
标签: java iphone objective-c ios
你可以使用KVC:
[label setValue:@"Some text" forKey:@"text"];
【讨论】:
首先想到的是使用@property 和点符号。一个名为 'foo' 的 @property 类允许你这样做:
anInstance.foo = @"bar";
字面意思在编译时翻译成
[anInstance setFoo:@"bar"];
(类似于“getter”)
其他的方式更高级,比如使用NSObject的performSelector:方法,或者其他系统比如NSInvocation等。再深入一点,还有在运行时调用方法的方法,用c函数(所有这些语法最终都沸腾了)无论如何都要调用c函数);但我敢肯定这不是你想要的。
【讨论】:
[]而不是.时是否有性能考虑?
是的。您可以使用点语法来获取或设置 Objective C 属性。因此,例如在 UILabel *label 上设置文本可以通过 [label setText:@"some text"]; 或 label.text = @"some text"; 来完成
【讨论】:
-> 怎么样,如 label->setText("some text"); ?
看在迂腐的份上,何不去低级:
objc_msgSend(object, sel_getUid("foo"), errVar);
【讨论】: