Download - Objective c runtime 分享
Objective-C Runtime DaidoujiChen 20150702
Who am i
About Me
• 2008 - 2010 ASUS• 2011 - 2015 Start Up• 2015 ~ Hiiir
Message Forwarding
Message Forwarding
• 當我們傳遞 message 給一個 object, 而這個 object 無法 handle 時 , 會產生錯誤 .
• 在系統拋出錯誤之前 , 處理這個問題 , 避免 crash 的發生 .
Message Forwarding
• 在走到 doesNotRecognizeSelector: 之前 , 會經過下面這些 method.
Message Forwarding
1.+ (BOOL)resolveInstanceMethod:(SEL)name;
如果 object 可以處理這個 instance method, 回傳 YES, 不能處理 , 回傳 NO.
Message Forwarding
2. - (id)forwardingTargetForSelector:(SEL)aSelector;
決定無法被 handle 的 method, 將轉發給哪一個 object.
Message Forwarding
3.- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;
NSMethodSignature 裡面記載一個 method 的回傳型別 , 以及各個參數的型別 .
!! 注意 !! NSMethodSignature 中並沒有記載 selector.
Message Forwarding
3. - (void)forwardInvocation:(NSInvocation *)anInvocation;
NSInvocation 裡面主要有三個部分 , • target• selector• methodSignature當包含這三個元素的時候 , 便可以以 invoke 運行
Message Forwarding
所以我們有三個機會可以拯救 object 免於 crash 的命運 .
Q&A
Reference
Objective-C Runtime Programming GuideObjective-C Runtime ReferenceNSObjectNSStringType EncodingsObjective-C respondsToSelector