美文网首页
runtime的学习

runtime的学习

作者: 快乐的tomato | 来源:发表于2017-11-29 15:36 被阅读11次

    一直听说runtime很牛逼,说实话,在项目中没有用到过(菜鸟一个🤣),只是在搬砖的时候,看到别人的demo里用过,也没有去细细研究,现在来好好的学习一下,网上有很多关于runtime、黑魔法的博客和文章,有的东西我也懒的去总结了,就看看别人的好了,我现在只记下感觉对自己有用的。

    一、什么是runtime?

    iOS 模块详解—「Runtime面试、工作
    这篇文章感觉是小马哥iOS的runtime视频学习笔记,不过还是不错的

    二、runtime的应用

    1、使用runtime扩大button的点击区域
    后续补充

    三、关于runtime的面试题
    1、objc中向一个nil对象发送消息将会发生什么?

    如果一个方法返回值是一个对象,那么发送给nil的消息将返回0(nil)。
    如果方法返回值为指针类型,发送给nil的消息将返回0。
    如果方法返回值为结构体,发送给nil的消息将返回0。

    2、objc在向一个对象发送消息时,发生了什么?

    根据对象的 isa指针找到该对象对应的类或其父类中查找方法,注册方法编号,根据方法编号去查找对应方法,找到只是最终函数实现地址,根据地址去方法区调用对应函数.

    3、objc中向一个对象发送消息[obj foo]和objc_msgSend()函数之间有什么关系?

    objc_msgSend()是[obj foo]的具体实现。
    在runtime中,objc_msgSend()是一个c函数,[obj foo]会被翻译成这样的形式objc_msgSend(obj, foo)。

    4、什么时候会报unrecognized selector的异常?iOS有哪些机制来避免走到这一步?

    找不到方法的时候会报异常
    当系统查询不到方法的时候,会调用+(BOOL)resolveInstanceMethod:(SEL)sel动态解释的方法来给我一次机会来添加,调用不到的方法。或者我们可以再次使用-(id)forwardingTargetForSelector:(SEL)aSelector重定向的方法来告诉系统,该调用什么方法,一来保证不会崩溃。

    5、一个objc对象如何进行内存布局?

    答案

    6、一个objc对象的isa的指针指向什么?有什么作用?

    答案

    7、runtime如何通过selector找到对应的IMP地址?(分别考虑类方法和实例方法
    8、使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么?
    10、objc_msgForward函数是做什么的,直接调用它将会发生什么?

    答案

    11、objc中的类方法和实例方法有什么本质区别和联系?

    调用的方式不同,类方法必须使用类调用,在方法里面不能调用属性,类方法里面也必须调用类方法。存储在元类结构体里面的methodLists里面
    实例方法必须使用实例对象调用,可以在实例方法里面使用属性,实例方法也必须调用实例方法。存储在类结构体里面的methodLists里面

    12、runtime如何实现weak变量的自动置nil?

    答案

    相关文章

      网友评论

          本文标题:runtime的学习

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