美文网首页
对象底层原理

对象底层原理

作者: Ray_lawq | 来源:发表于2019-02-20 15:37 被阅读0次

先来一个耳目一新的回答:

什么是 runtime(运行时)?
是由c,c++,汇编实现的一套api,是为了c进化到oc添加的运行时功能

再来先看下边的代码,p,p1,p2 的地址是否一样?

答案是一样!!!why?

带着这个疑问,让我们先看看alloc 方法的底层实现。

在objc 源码里边可以看到alloc方法调用顺序

在xcode的寄存器里边跟进_class_createInstanceFromZone 里边去,打印x0寄存器,得到Person 的值,说明person对象已经初始化成功了;what?那init 干什么了啊,毛都不干,还调用它干啥?

带着这个疑问,我们再来看init 的源码

直接返回了传进来的对象…. 我有一句mmp 不知当讲不当讲,苹果爸爸为啥么要这么做呢?

其实这是苹果的一种设计模式(工厂模式),父类什么都不干(object),把所有的权限都给了子类(person),子类(person)可以自定义init方法,那么再次初始化person 类,就会直接走你自己的init 方法(init 方法里边可以赋值等等的各种操作)—为了自由(不是部落【偷笑】)

那么 使用 new 来初始化对象呢?然我们看一下new的源码

和 alloc一样的走了 callAlloc 方法,然后直接调用init 方法;这说明了什么?说明new 和 alloc + init 效果是一样的,不一样的地方只是 alloc + init 这种模式可以自定义init 方法,new 这种只能使用系统默认的init 方法。

那么让我们再分析一下 _class_createInstanceFromZone 方法里边大概干了什么?(主要是234步骤)

对齐算法 常用实现(以8 位为例)

获取类大小的时候是以8字节对齐,而分配内存的时候又以16位对齐,那么让我们看一下具体的表现:

相关文章

网友评论

      本文标题:对象底层原理

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