时间:2011-08-04 09:49:20

标签: objective-c method-missing

objective-c是否提供了一种拦截对不存在的类方法的调用的方法?

2 个答案:

答案 0 :(得分:5)

forwardInvocation方法是您想要使用的方法。在对象上调用不存在的选择器时会自动调用它。此方法的默认行为是调用doesNotRecognizeSelector:(这是将调试信息输出到控制台的内容),但您可以覆盖它执行任何操作。 Apple推荐的一种方法是让方法将方法调用转发给另一个对象。

- (void)forwardInvocation:(NSInvocation *)anInvocation

请注意,forwardInvocation是一项相当昂贵的操作。 NSInvocation对象需要由框架创建,并且(可选)用于在另一个实例上调用选择器。如果您正在寻找(相对)更快的方法来检测不存在的选择器,那么您可以选择实现forwardingTargetForSelector

- (id)forwardingTargetForSelector:(SEL)aSelector

你应该Apple's documentation了解如何有效地覆盖这些方法,还有一些需要注意的问题,特别是在覆盖同一个对象上的forwardInvocation方法时会有缺少的选择器。

答案 1 :(得分:2)

相关问题