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