iOS 底层探索之路

iOS 底层探索:OC底层面试题分析(会持续补充)

2020-12-05  本文已影响0人  欧德尔丶胡

iOS 底层探索: 学习大纲 OC篇

前言

目录

一、Runtime是什么?

举例:category分类,添加属性是无用的,调用属性会crash,但是通过runtime动态关联对象,重写setter、getter方法的方式就可以实现分类的属性。

二、方法的本质,sel是什么?IMP是什么?两者之间的关系又是什么?

三、方法的调用顺序

类的方法 和 分类方法 重名,如果调用,是什么情况?

四、 Runtime是如何实现weak的,为什么可以自动置nil

当weak引用指向的对象被释放时,如何去处理weak指针?

1、调用objc_release
2、因为对象的引用计数为0,所以执行dealloc
3、在dealloc中,调用了_objc_rootDealloc函数
4、在_objc_rootDealloc中,调用了object_dispose函数
5、调用objc_destructInstance
6、最后调用objc_clear_deallocating

简单来说:
a. 从weak表中获取被释放对象的地址为键值的记录
b. 将包含在记录中的所有附有 weak修饰符变量的地址,赋值为 nil
c. 将weak表中该记录删除
d. 从引用计数表中删除废弃对象的地址为键值的记录

五、能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?

六、Runtime Asssociate方法关联的对象,需要在dealloc中释放?

七、 [self class]和[super class]的区别?

上一篇 下一篇

猜你喜欢

热点阅读