编译objc主要是用clang + LLVM
clang做前端 llvm优化代码 llvm产生机器码
要尽量画内存图
值类型跟随实例在栈中,引用是在堆中
属性是对外可以被访问的,编译器可以自动产生get set方法 属性本身还有一些修饰符可以定义读写等性质
同时编译器可以产生出一个对应的实例变量_加property的名字
objc的实例方法都是公用的,但是如果在实现中放入方法,则相当于java中的private了
objc方法是动态调用的,即内存的实例结构中有指向一个methodList中的指针,methodList中又保存了方法入口的指针
对象初始化器可以有多个,类型初始化器只能有一个 析构器只能有一个 new 相当于调用了alloc/init的无参版本
类型初始化是一个进程周期内部只会调用一次,这是规则,如果自己实现了类型初始化,则如果没有判断self == 当前的类型
则会被执行两次逻辑 子类的类型初始化器会自动调用父类的初始化器
继承时尽量避免在父类init和dealloc方法中调用子类重写的方法
objc继承时方法没有重载只要重写