iOS runtime(二)消息转发

2018-05-02  本文已影响0人  Nomo_C

当调用[recever message]时,其实执行的是id objc_msgSend(id self, SEL op, ...)这个函数。recever通过isa指针找到当前对象的class,首先到当前class的cache中查找,去过找到,调用op,如果没找到就到methodLists中去查找,如果没有就到super_class中去查找,如此循环直到NSObject。如果在NSObject中仍然没有找到程序不会立即crash,而是会按照优先级执行下类三个方法(高优先级方法消息转发成功后不会再执行低优先级方法)

方案一:+ (BOOL)resolveInstanceMethod:(SEL)sel

               + (BOOL)resolveClassMethod:(SEL)sel

方案二:- (id)forwardingTargetForSelector:(SEL)aSelector

方案三:- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;

                - (void)forwardInvocation:(NSInvocation *)anInvocation;

上一篇下一篇

猜你喜欢

热点阅读