- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Runtime 面试题
一、objc对象的isa的指针指向什么?有什么作用?
指向他的类对象,从而可以找到对象上的方法
详解:下图很好的描述了对象,类,元类之间的关系:
图中实线是 super_class 指针,虚线是isa 指针。
1.Root class (class)其实就是NSObject,NSObject 是没有超类的,所以Root class(class)的superclass 指向nil。
2.每个Class 都有一个isa 指针指向唯一的Meta class
3.Root class(meta)的superclass 指向Root class(class),也就是NSObject,形成一个回路。
4.每个Meta class 的isa 指针都指向Root class (meta)。
二、一个 NSObject 对象占用多少内存空间?
受限于内存分配的机制,一个 NSObject对象都会分配 16byte 的内存空间。
但是实际上在 64 位 下,只使用了 8byte;
在32 位下,只使用了 4byte
一个 NSObject 实例对象成员变量所占的大小,实际上是 8 字节
本质是
获取 Obj-C 指针所指向的内存的大小,实际上是16 字节
对象在分配内存空间时,会进行内存对齐,所以在 iOS 中,分配内存空间都是 16字节 的倍数。
可以通过以下网址 :openS/tarballs 来查看源代码。
三、说一下对 class_rw_t 的理解?
rw 代表可读可写。
ObjC 类中的属性、方法还有遵循的协议等信息都保存在 class_rw_t 中:
四、说一下对 class_ro_t 的理解?
存储了当前类在编译期就已经确定的属性、方法以及遵循的协议。
五、说一下对 isa 指针的理解
说一下对 isa 指针的理解, 对象的isa 指针指向哪里?isa 指针有哪两种类型?
isa 等价于 is kind of
实例对象 isa 指向类对象
类对象指 isa 向元类对象
元类对象的 isa 指向元类的基类
isa 有两种类型
纯指针,指向内存地址
NON_POINTER_ISA,除了内存地址,还存有一些其他信息
isa源码分析
在Runtime源码查看isa_t是共用体。简化结构如下:
六、说一下 Runtime 的方法缓存?存储的形式、数据结构以及查找的过程?
cache_t 增量扩展的哈希表结构。哈希表内部存储的 bucket_t。
bucket_t 中存储的是 SEL 和 IMP 的键值对。
如果是有序方法列表,采用二分查找
如果是无序方法列表,直接遍历查找
cache_t结构体
散列表查找过程,在objc-cache.mm文件中
上面是查询散列表函数,其中cache_hash(k, m)是静态内联方法,将传入的key和mask进行操作返回
uint32_t索引值。do-while循环查找过程,当发生冲突cache_next方法将索引值减1。
七、使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么?
无论在MRC下还是ARC下均不需要,被关联的对象在生命周期内要比对象本身释放的晚很多,它们会在被
NSObject -dealloc 调用的object_dispose()方法中释放。
详解:
八、实例对象的数据结构?
具体可以参看 Runtime 源代码,在文件 objc-private.h 的第 127-232 行。
本质上 objc_object 的私有属性只有一个 isa 指针。指向 类对象 的内存地址。
九、什么是method swizzling (俗称黑魔法)
简单说就是进行方法交换
在Objective-C 中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector 的名字。利
用Objective-C 的动态特性,可以实现在运行时偷换selector 对应的方法实现,达到给方法挂钩的目的。
每个类都有一个方法列表,存放着方法的名字和方法实现的映射关系,selector 的本质其实就是方法名,IMP
有点类似函数指针,指向具体的Method 实现,通过selector 就可以找到对应的IMP。
换方法的几种实现方式
利用 method_exchangeImplementat
您可能关注的文档
最近下载
- 体例格式8:工学一体化课程《windows服务器基础配置与局域网组建》任务3学习任务考核方案.docx VIP
- 石方破碎开挖施工组织设计.pdf VIP
- TCCPA-陆上风力发电机组钢混塔架施工与质量验收规范.pdf VIP
- 2025年浙江省江山市中考数学试题及参考答案详解【新】.docx VIP
- 支持性护理对结直肠癌术后结肠造口患者生活质量改善情况分析.pdf VIP
- Goodrive300-01A系列空压机专用变频器说明书.pdf
- 跨境电商平台创业计划书.docx VIP
- 智能制造系统建模与仿真 课件 第1章 智能制造技术的产生及发展.pptx
- 2025年辅警招聘公安基础知识100题及答案.pdf VIP
- 砂浆及砌块原始记录.docx VIP
文档评论(0)