iOS 捕获未知方法的调用,避勉抛出异常
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
NSObject 对象是 Objecitve-C 中的根类,其有以下两个方法,在调用 NSObject 及其子类的方法不存在时,会将这个调用封装成 NSInvocation * 类型,试图传递给 forwardInvocation: 方法,如果原方法调用的对象重载了forwardInvocation: 方法,forwardInvocation: 方法就会被调用。
forwardingTargetForSelector: 的真正用途,从官网的描述中,还是未完全体会其可用的场景,只是后一方法在做反射处理时到时用到过,参见 “iOS
实现的 json 数据源的 O-R Mapping”。
forwardingTargetForSelector:
返回未知消息首先应该转向的对象。
Returns the object to which unrecognized messages should first be directed.
- (id)forwardingTargetForSelector:(SEL)aSelector
forwardInvocation:
由子类重载,用于前转消息到其它对象。
Overridden by subclasses to forward messages to other objects.
- (void)forwardInvocation:(NSInvocation *)anInvocation
- (void)forwardInvocation:(NSInvocation *)invocation { SEL orignalSelector = [invocation selector]; if ([friend respondsToSelector:orignalSelector]) { [invocation invokeWithTarget:friend]; } else { [super forwardInvocation:invocation]; } }