0

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

假设我在 Bar.m 中有一个名为 arrNSArray的对象。Foo在 Foo.m 中,我有一个(NSComparisonResult)compareFoo:方法,但我忘记在 Foo.h 文件中声明。然而,当我调用[arr sortedArrayUsingSelector:@selector(compareFoo:)];代码时运行良好。这是因为消息compareFoo:被发送到数组中的对象,这些对象是Foo对象,所以compareFoo:即使它没有在 Foo.h 中声明,它们也可以调用?

对此不是100%确定并且很好奇。谢谢!

4

1 回答 1

1

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

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

于 2012-10-02T23:12:26.827 回答