+initialize
·1 分钟
OC
目录
Objc - 系列文章之一
Part 9: 当前阅读
initialize是类第一次接收到消息时调用的( [类 alloc]的时候),每个类只会调用initialize一次(父类的initialize方法可能会被多调用),initialize是通过objc_msgSend调用的。
initialize调用顺序>
initialize调用顺序 #
- 先出初始化父类
- 再初始化子类(可能最终调用的是父类的initialize方法,因为是通过isa指针,superclass指针去寻找方法调用的)
initialize底层实现伪代码>
initialize底层实现伪代码 #
@interface Person
@end
@interface Student: Person
@end
void lookUpImpOrNil() {
//Student类没有初始化
if !student {
//Person类没有初始化
if !person {
objc_msgSend([Person class],@seletor(initialize))
}
objc_msgSend([Student class],@seletor(initialize))
}
}
阅读源码(objc4)>
阅读源码(objc4) #
- objc-msg-arm64.s
- objc_msgSend
- objc-runtime-new.mm
- class_getInstanceMethod
- lookUpImpOrNil
- lookUpImpOrForward
- _class_initialize
- callInitialize
- objc_msgSend(cls, SEL_initialize)
Objc - 系列文章之一
Part 9: 当前阅读