iOS 捕獲未知方法的調用,避勉拋出異常 – iPhone手機開發技術文章 iPhone軟體開發教學課程

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *