ios-源码分析
typedef struct objc_class *Class;
struct objc_class : objc_object {
}
typedef struct objc_object *id;
id objc_alloc(Class cls) {
return callAlloc(cls, true/*checkNil*/, false/*allocWithZone*/)
}
objc_alloc的问题:
symbol stub for: objc_alloc的方式 没有调用objc_msgSend
普通的方法调用objc_msgSend发送消息
1、为什么会走objc_alloc
2、为什么只走一次
答:a、走的symbol符号 - 没有走objc_msgSend
b、并不是我们调用,而是系统调用一个符号——通过MachOView我们可以发现在Symbol Tables下面看到了 _objc_alloc,即在编译期间就有了 编译器:Clang
c、LLVM
查看到 系统有一个代码:
A* test_alloc_class_ptr() {
// CALLS: {{call.*@objc_alloc}}
// CALLS-NEXT: bitcast i8*
// CALLS-NEXT: ret
return [B alloc];
}