我想检查一下我对这个例子中关于选择器的内容的理解:
假设我在Bar.m中有一个名为arr的NSArray
个Foo
个对象。在Foo.m中,我有一个(NSComparisonResult)compareFoo:
方法,但我忘了在Foo.h文件中声明。然而,当我打电话给[arr sortedArrayUsingSelector:@selector(compareFoo:)];
时,代码运行正常。这是因为消息compareFoo:
被发送到数组中的对象,这些对象是Foo
个对象,因此即使它们未在Foo中声明,它们也可以调用compareFoo:
。 H +
对这一点100%肯定并且好奇。谢谢!
答案 0 :(得分:1)
Objective-C具有动态类型,这意味着您可以将消息发送到对象的实例,而无需在接口或.h文件中声明它。你这样做的方法是通过选择器。
选择器没有编译时间检查。这就是为什么当你正确地声明一个选择器时,有时你会得到关于对象上不存在的方法的运行时错误。