iOS 架构师之路~底层原理五 : (面试题目整理)
2023-11-07 12:55:21
iOS 架构师之路~底层原理五 : (面试题目整理)
1. 一个OC对象占用多少内存?
一个OC对象占用的内存大小由其实例变量、成员变量、对齐字节和isa指针决定。实例变量和成员变量的大小是固定的,对齐字节用于保证对象内存地址是8的倍数,isa指针指向对象的类对象,通常为8个字节。因此,一个OC对象占用的内存大小至少为24个字节。
2. 对象的isa指针指向哪里?
对象的isa指针指向对象的类对象。类对象是类本身的对象,存储着类的元数据信息,如类的名称、父类、成员变量、方法等。isa指针用于确定对象的类型,以便在运行时调用正确的类方法或实例方法。
13. initialize方法如何调用,以及调用时机
initialize方法是在类第一次加载时调用的,通常用于初始化类变量或执行一些一次性的操作。initialize方法的调用时机在load方法之后,在类第一次被实例化之前。如果子类重写了initialize方法,则子类的initialize方法会在父类的initialize方法之后调用。
13. load、initialize方法的区别什么?它们在category中的调用的顺序?以及出现继承时他们之间的调用过程?
load方法和initialize方法都是类方法,但在调用时机和作用上有所不同。load方法是在类第一次加载时调用的,用于初始化类变量或执行一些一次性的操作。initialize方法是在类第一次被实例化之前调用的,用于初始化实例变量或执行一些一次性的操作。
在Category中,load方法和initialize方法的调用顺序与在类中相同。如果Category重写了load方法或initialize方法,则Category的load方法或initialize方法会在类的load方法或initialize方法之后调用。
当出现继承时,子类的load方法和initialize方法会在父类的load方法和initialize方法之后调用。如果子类重写了load方法或initialize方法,则子类的load方法或initialize方法会在父类的load方法或initialize方法之后调用。
14. Category能否…
Category不能添加实例变量或成员变量。因为Category是类的扩展,而不是类的修改。添加实例变量或成员变量会改变类的结构,而Category不能做到这一点。