Re: alloc和init 的指令

楼主: seruziu (艾利普拉)   2014-07-15 09:46:27
不如把全部拆开来吧
其实 +alloc 这个 Method 的动作是
// 取得 class
Class myclass = objc_getClass("MyClass");
// 取得 class 大小
size_t classSize = class_getInstanceSize(myclass);
// 设立物件指标,分配内存空间
MyClass *obj = calloc(1, classSize);
// 指定 isa (这个方式已经在新的 llvm 禁止使用了)
obj->isa = myclass
其实 -init 的用途是确保所有 members 被初始化,但是他跟其他物件导向语言不同
的是,-init 并不会被保证执行,也不一定要被执行(不跑可能会出状况就是了)。
所以充其量只是一个跟其他 instance method 等价的方法而已。
作者: MoonAndEye (月如无恨月常圆)   2014-07-15 17:31:00
我想知道这个,请问这个是去哪里查的?
作者: Killercat (杀人猫™)   2014-07-16 03:20:00
其实不全对,不过基本上很类似http://tinyurl.com/pff7fl8 这是目前NSObject.mm实作他真正所有alloc的动作在_objc_rootAlloc里面现在都用class_createInstance全包了 不再由外面分开好几动来慢慢做不过calloc或多或少其实已经包含了一点init的意思了...

Links booklink

Contact Us: admin [ a t ] ucptt.com