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]; } }