美文网首页
IOS 2020-02-28 一周学习内容总结

IOS 2020-02-28 一周学习内容总结

作者: 缪雨轩 | 来源:发表于2020-02-28 16:23 被阅读0次

    1.runtime的内容复习总结,知道了消息传递和消息转发的机制和内部原理。

    runtime特性:
    消息传递,消息转发
    runtime是oc面向对象和动态机制的基石
    oc通过运行时系统动态的创建类和对象,进行消息传递和消息转发,runtime扩展了oc,从系统层面解决了项目中的一些设计和技术的问题,消息传递时runtime的核心概念
    runtime基本是用C语言和汇编写的
    
    runtime消息传递的过程
    
    1.首先通过对象的isa指针找到它的class
    2.在class的method list中寻找foo
    3.如果找不到foo就去superclass中找
    4.一旦找到foo这个函数就执行它的实现IMP
    
    但是这个流程在实现中存在问题,效率低下
    runtime给出了解决方案:
    objc-class中有一个重要的成员:objc-cache
    之前经常被调用的方法被缓存到了这里,foo函数的method_name作为key,method_imp作为vlaue保存了起来,下载再去调用方法的时候会先去cache中找,避免每次都去遍历objc_method_list,提高了效率
    
        消息传递的一些概念:
    1,类对象(objc_class)
    oc类是用class类型来表示的,类对象实际上是一个指向objc_class结构体的指针,里面包含了父类的指针,类的名字,版本,信息,实例大小,实例变量列表,方法列表,缓存,协议列表,class本身就是一个对象,称为类对象。
    2.实例(objc_object)
    类对象的isa指针的指向我们称之为元类(metaClass)
    元类中包含了创建类属性和方法的全部信息
    
    Pasted Graphic 2.png
    实例对象的isa指针指向类对象
    类对象的isa指针指向元类
    元类的superclass指针指向了父类的元类
    父类的元类的superclass指针指向了根类的元类
    根类的元类的isa指针指向它自己    
    根类的元类的superclass指针指向了类对象(NSobject)
    NSobject的superclass指针指向nil
    
    3.method(函数)
    能够独立完成一个功能的一段代码
    4.SEL
    是objc_selector的实例对象
    @property SEL selector;
    selector是SEL的实例对象,名字叫方法选择器,在oc中不允许名称相同参数不同的方法存在
    5.IMP
    指向最终实现程序内存地址的指针
    6.objc_cache(类缓存)
    存放了之前调用的方法,每次调用方法是不会先去方法列表中遍历,而是先去缓存中找,如果找不到再去方法列表中找。
    7.Category(objc_category)
    表示一个指向分类的结构体的指针
    
    runtime消息转发 
    执行的最后三个步骤
    1.动态方法解析
    2.备用接收者
    3.完整消息转发
    
    Pasted Graphic.png
    动态方法解析调用的方法是:resolveInstanceMethod,如果返回NO,执行备用接收者
    备用接收者调用的方法是:forwardingTargetForSelector,返回空就执行完整消息转发
    完整消息转发先调用的方法是: methodSignatureForSelector,如果返回了签名就继续执行
    forwardInvocation,如果返回了空就抛出异常doesNotRecognizeSelector
    

    2.算法部分看了三个问题:1.两数之和问题 2.数字反转问题 3.最大水量问题

    代码地址

    https://github.com/miaoyuxuan/AlgorithmLearning.git

    相关文章

      网友评论

          本文标题:IOS 2020-02-28 一周学习内容总结

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