ARC和Runtime

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执行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 面向对象的三大特性:封装、继承、多态 OC内存管理 _strong 引用计数器来控制对象的生命周期。 _weak...
    运气不够技术凑阅读 1,166评论 0 10
  • 继上Runtime梳理(四) 通过前面的学习,我们了解到Objective-C的动态特性:Objective-C不...
    小名一峰阅读 792评论 0 3
  • runtime 运行时语言,实现Object-C的C语言库,将OC转换成C进行编译的过渡者。 作为一门动态编程语言...
    夜雨聲煩_阅读 564评论 0 0
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 2,242评论 0 7
  • 本文转载自:http://yulingtianxia.com/blog/2014/11/05/objective-...
    ant_flex阅读 818评论 0 1