Re: alloc和init 的指令

看板MacDev作者 (艾利普拉)時間11年前 (2014/07/15 09:46), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串4/4 (看更多)
不如把全部拆開來吧 其實 +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 等價的方法而已。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.38.1 ※ 文章網址: http://www.ptt.cc/bbs/MacDev/M.1405388790.A.5CB.html

07/15 17:31, , 1F
我想知道這個,請問這個是去哪裡查的?
07/15 17:31, 1F

07/16 03:20, , 2F
其實不全對,不過基本上很類似
07/16 03:20, 2F

07/16 03:20, , 3F
http://tinyurl.com/pff7fl8 這是目前NSObject.mm實作
07/16 03:20, 3F

07/16 03:21, , 4F
他真正所有alloc的動作在_objc_rootAlloc裏面
07/16 03:21, 4F

07/16 03:22, , 5F
現在都用class_createInstance全包了 不再由外面分開好
07/16 03:22, 5F

07/16 03:22, , 6F
幾動來慢慢做
07/16 03:22, 6F

07/16 03:28, , 7F
不過calloc或多或少其實已經包含了一點init的意思了...
07/16 03:28, 7F
文章代碼(AID): #1Jn8VsNB (MacDev)
文章代碼(AID): #1Jn8VsNB (MacDev)