美文网首页
IOS精选面试题(三)

IOS精选面试题(三)

作者: qinxi | 来源:发表于2021-01-21 16:43 被阅读0次

OC调用一个方法底层做了哪些事

一:如果是调用实例方法,通过实例对象的isa指针找到类对象,在类对象的方法缓存(cache,为一个hash表)中查找,如果找到则调用,没找到通过结构体中的bits找到class_rw_t结构体中的methods中查找,如果找到则调用,没找到则通过superclass找父类,找到父类后在父类的缓存中找,找不到在class_rw_t中找,找不到继续通过superclass寻找父类,直到基类还找不到,则走第二步

如果是调用类方法,通过类对象的isa指针找到元类对象,在元类对象的方法缓存中查找,如果找到则调用,找不到通过bits找class_rw_t的methods中查找,如果找到则调用,没找到则通过superclass找父类,找到父类后在父类的缓存中找,找不到在class_rw_t中找,找不到继续通过superclass寻找父类,直到基类还找不到,则通过基类的superclass找类对象的基类,然后查找,如果还找不到,则走第二步

二:消息的动态决议 

       重写resolveInstanceMethod动态添加方法,如果返回NO则走第三步

三:消息的动态转发

重写forwardingTargetForSelector返回一个用来处理这个方法的类,

重写下面两个方法生成方法签名也可以实现动态添加方法

-(NSMethodSignature*)methodSignatureForSelector:(SEL)selector;

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

如果上述的都没实现,则程序崩溃,报错unrecgnized for selector

相关文章

网友评论

      本文标题:IOS精选面试题(三)

      本文链接:https://www.haomeiwen.com/subject/tgkdzktx.html