-forwardInvocation类方法

use*_*216 3 objective-c nsobject message-forwarding

我正在努力通过Facade类转发类方法.

为了澄清,我推翻了以下所有方法:

-(NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
-(void)forwardInvocation:(NSInvocation *)anInvocation
+(BOOL)instancesRespondToSelector:(SEL)aSelector
+(NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector
+(IMP)instanceMethodForSelector:(SEL)aSelector
+(BOOL)resolveClassMethod:(SEL)sel
+(BOOL)resolveInstanceMethod:(SEL)sel
Run Code Online (Sandbox Code Playgroud)

..然而,对于类方法,唯一要调用的是+resolveClassMethod.从那里,无论我是否返回YES,我都会立即得到一个无法识别的选择器异常.

这是怎么回事?
类消息转发与实例消息转发的工作方式不同吗?
同样,为什么没有+forwardInvocation类方法呢?

任何帮助将不胜感激.

new*_*cct 6

所以,你已经知道,为了使一个对象做forwardInvocation了实例方法,你必须实现的实例方法-forwardInvocation:-methodSignatureForSelector:(其他是不必要的).那么,类方法只是类对象的方法.类是对象,并且像任何其他对象一样工作,并且支持根类的所有实例方法(NSObject在本例中).

Objective-C运行时并不关心对象是类对象还是非类对象.消息转发机制是相同的.因此,当您向对象发送消息时,无论它是什么,并且无法找到它,它只是在对象上查找forwardInvocation:methodSignatureForSelector:方法.因此,您需要在类对象上使用这些方法.

即实现类方法+forwardInvocation:+methodSignatureForSelector: