美文网首页
ARC和Runtime

ARC和Runtime

作者: 无敌大闸蟹 | 来源:发表于2020-03-24 16:49 被阅读0次

    ARC

    ARC 编译器会自动插入对应的代码,再结合Objective C的runtime,实现自动引用计数
    retain的过程 —— 获取全局的map( 叫做sideTable 对象的地址为key 引用计数的值为value ) 加锁 引用计数器 + 1 解锁

    release —— 查找map,对引用计数减1,如果引用计数小于阈值,则调用dealloc
    ((void(*)(objc_object *, SEL))objc_msgSend)(this, SEL_dealloc)

    autorelease ———把对象存储到AutoreleasePoolPage的链表里。等到auto release pool被释放的时候,把链表内存储的对象删除,所以AutoreleasePoolPage就是自动释放池的内部实现

    weak 有个全局的map 对象的地址为key weak修饰的对象的地址是value 对象释放后 根据对象的地址可以找到对应的weak引用的地址,将其置为nil

    block也是对象 背后的内存模型实际上是一个结构体,这个结构体会存储一个函数指针来指向block的实际执行代码

    Runtime

    Selector ——C的字符串
    SEL 指向Selector的指针
    IMP 指向函数体的函数指针
    Method 指向OC方法的指针 包含 { SEL:methodname IMP:method_imp }
    通过isa找到类 (类方法是找到类元metaClass)其中有SEL:IMP的表(method_list里面Method) 通过sel找到imp执行

    相关文章

      网友评论

          本文标题:ARC和Runtime

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