美文网首页
题目小记

题目小记

作者: 过江鸟iOSer | 来源:发表于2019-04-11 17:06 被阅读0次

1. Objective-C 对象是什么?Class 是什么?id 又是什么?

在 Objective-C 中,每一个对象是一个结构体,每个对象都有一个 isa 指针,类对象 Class 也是一个对象。所以,我们说,凡是包含 isa 指针的,都可以被认为是 Objective-C 中的对象。运行时可以通过 isa 指针,查找到该对象是属于什么类(Class)。

2. isa 是什么?为什么要有 isa?

(1)isa 的作用:用于查找对象(或类对象)所属类(或元类)的信息,比如方法列表。
(2)isa 是什么:isa 的数据结构是一个 isa_t 联合体,其中包含其所属的 Class 的地址,通过访问对象的 isa,就可以获取到指向其所属 Class 的指针(针对 tagged pointer 的情况,也就是 non-pointer isa,有点不一样的是,除了指向 class 的指针,isa 中还会包含对象本身的一些信息,比如对象是否被弱引用)。

3. 为什么在 Objective-C 中,所有的对象都用一个指针来追踪?

内存中的数据类型分为两种:值类型和引用类型。指针就是引用类型,struct 类型就是值类型。
值类型在传值时需要拷贝内容本身,而引用类型在传递时,拷贝的是对象的地址。所以,一方面,值类型的传递占用更多的内存空间,使用引用类型更节省内存开销;另一方面,也是最主要的原因,很多时候,我们需要把一个对象交给另一个函数或者方法去修改其中的内容(比如说一个 Person 对象的 age 属性),显然如果我们想让修改方获取到这个对象,我们需要的传递的是地址,而不是复制一份。
对于像 int 这样的基本数据类型,拷贝起来更快,而且数据简单,方便修改,所以就不用指针了。
另一方面,对象的内存是分配在堆上的,而值类型是分配到栈上的。所以一般对象的生命周期会比普通的值类型要长,而且创建和销毁对象以及内存管理是要消耗性能的,所以通过指针来引用一个对象,比直接复制和创建对象要更有效率、更节省性能。

相关文章

  • 题目小记

    1. Objective-C 对象是什么?Class 是什么?id 又是什么? 在 Objective-C 中,每...

  • 点评《疫情求医小记》收获,要点评得共情

    文章题目:疫情求医小记[https://www.jianshu.com/p/b1c229fdfc6a] 文章链接:...

  • 作文里理想都去哪了

    小记 抬笔写题目时,我有点犹豫,题目这么烂俗,而且这还是我第一次写一篇完整的文字,心里忐忑,甚是惶恐。 小学时的理...

  • Web版扫雷开发小记(3)

    前篇: web版扫雷开发小记(1)web版扫雷开发小记(2)web版扫雷开发小记(3)web版扫雷开发小记(4) ...

  • 小记

    小记

  • 参观中药房

    今天是孩子第一次参加安广小记者的活动,早早的起床,穿上小记者的马甲,带上小记者帽子,还有小记者的专用笔和...

  • 参观中药房

    今天是孩子第一次参加安广小记者的活动,早早的起床,穿上小记者的马甲,带上小记者帽子,还有小记者的专用笔和...

  • 记头条前端面试

    头条前端 面试小记 因为是职业生涯第一次面试, 所以有很多地方准备不足的地方, 心理上有点慌张, 现将面试的题目...

  • Web扫雷开发小记(1)

    目录Web扫雷开发小记(2)Web扫雷开发小记(3)Web扫雷开发小记(4) 刚好今天做阿里前端笔试问到扫雷了,那...

  • web版扫雷开发小记(4)

    目录:Web扫雷开发小记(1)Web扫雷开发小记(2)Web扫雷开发小记(3) 其实在完成上篇的功能之后,一个扫雷...

网友评论

      本文标题:题目小记

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