runtime?
1,支持nil發(fā)送消息
2,支持selector為空(就是方法為空,selector也能識(shí)別)
runtime selector方法識(shí)別
1,在當(dāng)前class找
2,在父類class找,->直到nsobject類
3,動(dòng)態(tài)方法解析,向當(dāng)前類發(fā)送 resolveInstanceMethod: 信號(hào),檢查是否動(dòng)態(tài)向該類添加了方法
4,快速消息轉(zhuǎn)發(fā),檢查該類是否實(shí)現(xiàn)了 forwardingTargetForSelector: 方法,若實(shí)現(xiàn)了則調(diào)用這個(gè)方法。若該方法返回值對(duì)象非nil或非self,則向該返回對(duì)象重新發(fā)送消息。
5,標(biāo)準(zhǔn)消息轉(zhuǎn)發(fā),runtime發(fā)送methodSignatureForSelector:消息獲取Selector對(duì)應(yīng)的方法簽名。返回值非空則通過forwardInvocation:轉(zhuǎn)發(fā)消息,返回值為空則向當(dāng)前對(duì)象發(fā)送doesNotRecognizeSelector:消息,程序崩潰退出。