在.mm中调用选择器但不在.h文件中调用

时间:2012-10-02 23:04:22

标签: objective-c xcode selector

我想检查一下我对这个例子中关于选择器的内容的理解:

假设我在Bar.m中有一个名为arr的NSArrayFoo个对象。在Foo.m中,我有一个(NSComparisonResult)compareFoo:方法,但我忘了在Foo.h文件中声明。然而,当我打电话给[arr sortedArrayUsingSelector:@selector(compareFoo:)];时,代码运行正常。这是因为消息compareFoo:被发送到数组中的对象,这些对象是Foo个对象,因此即使它们未在Foo中声明,它们也可以调用compareFoo:。 H +

对这一点100%肯定并且好奇。谢谢!

1 个答案:

答案 0 :(得分:1)

Objective-C具有动态类型,这意味着您可以将消息发送到对象的实例,而无需在接口或.h文件中声明它。你这样做的方法是通过选择器。

选择器没有编译时间检查。这就是为什么当你正确地声明一个选择器时,有时你会得到关于对象上不存在的方法的运行时错误。