iOS Runtime面试题(runtime如何通过selector找到对应的IMP地址?)

2019-11-20
阅读 1 分钟
178
每一个类对象中都一个方法列表,方法列表中记录着方法的名称,方法实现,以及参数类型,其实selector本质就是方法名称,通过这个方法名称就可以在方法列表中找到对应的方法实现.

iOS Runtime面试题(类对象的数据结构?)

2019-11-20
阅读 1 分钟
200
类对象的数据结构? 具体可以参看 Runtime 源代码。 类对象就是 objc_class。 {代码...} 它的结构相对丰富一些。继承自objc_object结构体,所以包含isa指针 isa:指向元类 superClass: 指向父类 Cache: 方法的缓存列表 data: 顾名思义,就是数据。是一个被封装好的 class_rw_t 。 热文推荐 2019 全网 iOS 面试题以及答案...

iOS Runtime面试题(能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么?)

2019-11-20
阅读 1 分钟
124
1.因为编译后的类已经注册在 runtime 中,类结构体中的 objc_ivar_list 实例变量的链表和 instance_size 实例变量的内存大小已经确定,同时runtime会调用 class_setvarlayout 或 class_setWeaklvarLayout 来处理strong weak 引用.所以不能向存在的类中添加实例变量。2.运行时创建的类是可以添加实例变量,调用class_addIv...

iOS Runtime面试题(如何给 Category 添加属性?关联对象以什么形式进行存储?)

2019-11-20
阅读 1 分钟
189
如何给 Category 添加属性?关联对象以什么形式进行存储? 查看的是 关联对象 的知识点。 详细的说一下 关联对象。 关联对象 以哈希表的格式,存储在一个全局的单例中。 {代码...} 热文推荐 2019 全网 iOS 面试题以及答案总结!

iOS Runtime面试题(什么时候会报unrecognized selector的异常?)

2019-11-20
阅读 1 分钟
149
objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,如果,在最顶层的父类中依然找不到相应的方法时,会进入消息转发阶段,如果消息三次转发流程仍未实现,则程序在运行时会挂掉并抛出异常unrecognized selector sent to XXX 。

iOS Runtime面试题(什么是method swizzling(俗称黑魔法))

2019-11-20
阅读 1 分钟
140
在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。每个类都有一个方法列表,存放着方法的名字和方法实现的映射关系,selector的本质其实就是方法名,IMP有点类似函数指针,...

iOS Runtime面试题(实例对象的数据结构?)

2019-11-20
阅读 1 分钟
231
实例对象的数据结构? 具体可以参看 Runtime 源代码,在文件 objc-private.h 的第 127-232 行。 {代码...} 本质上 objc_object 的私有属性只有一个 isa 指针。指向 类对象 的内存地址。 热文推荐 2019 全网 iOS 面试题以及答案总结!

iOS Runtime面试题(使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么?)

2019-11-20
阅读 1 分钟
150
无论在MRC下还是ARC下均不需要,被关联的对象在生命周期内要比对象本身释放的晚很多,它们会在被 NSObject -dealloc 调用的object_dispose()方法中释放。

iOS Runtime面试题(说一下 Runtime 的方法缓存?存储的形式、数据结构以及查找的过程?)

2019-11-20
阅读 1 分钟
162
说一下 Runtime 的方法缓存?存储的形式、数据结构以及查找的过程? cache_t增量扩展的哈希表结构。哈希表内部存储的 bucket_t。 bucket_t 中存储的是 SEL 和 IMP的键值对。 如果是有序方法列表,采用二分查找 如果是无序方法列表,直接遍历查找 cache_t结构体 {代码...} {代码...} 散列表查找过程,在objc-cache.mm文件...

iOS Runtime面试题(说一下对 isa 指针的理解)

2019-11-20
阅读 2 分钟
222
说一下对 isa 指针的理解, 对象的isa 指针指向哪里?isa 指针有哪两种类型? isa 等价于 is kind of 实例对象 isa 指向类对象 类对象指 isa 向元类对象 元类对象的 isa 指向元类的基类 isa 有两种类型 纯指针,指向内存地址 NON_POINTER_ISA,除了内存地址,还存有一些其他信息 isa源码分析 在Runtime源码查看isa_t是共...

iOS Runtime面试题(说一下对 class_ro_t 的理解?)

2019-11-20
阅读 1 分钟
160
说一下对 class_ro_t 的理解? 存储了当前类在编译期就已经确定的属性、方法以及遵循的协议。 {代码...} baseMethodList,baseProtocols,ivars,baseProperties三个都是以为数组。 热文推荐 2019 全网 iOS 面试题以及答案总结!

iOS Runtime面试题(说一下对 class_rw_t 的理解?)

2019-11-20
阅读 1 分钟
159
说一下对 class_rw_t 的理解? rw代表可读可写。 ObjC 类中的属性、方法还有遵循的协议等信息都保存在 class_rw_t 中: {代码...} 热文推荐 2019 全网 iOS 面试题以及答案总结!

iOS OC底层面试题(一个 NSObject 对象占用多少内存空间?)

2019-11-20
阅读 1 分钟
192
一个 NSObject 对象占用多少内存空间? 受限于内存分配的机制,一个 NSObject对象都会分配 16byte 的内存空间。 但是实际上在 64位 下,只使用了 8byte;在32位下,只使用了 4byte 一个 NSObject 实例对象成员变量所占的大小,实际上是 8 字节 {代码...} 本质是 {代码...} 获取 Obj-C 指针所指向的内存的大小,实际上是16...

iOS Runtime面试题(一个objc对象的isa的指针指向什么?有什么作用?)

2019-11-18
阅读 1 分钟
176
一个objc对象的isa的指针指向什么?有什么作用? 指向他的类对象,从而可以找到对象上的方法 详解:下图很好的描述了对象,类,元类之间的关系: 图中实线是 super_class指针,虚线是isa指针。 1.Root class (class)其实就是NSObject,NSObject是没有超类的,所以Root class(class)的superclass指向nil。2.每个Class都有一...