作者seruziu (艾利普拉)
看板MacDev
标题Re: alloc和init 的指令
时间Tue Jul 15 09:46:27 2014
不如把全部拆开来吧
其实 +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://webptt.com/cn.aspx?n=bbs/MacDev/M.1405388790.A.5CB.html
1F:推 MoonAndEye:我想知道这个,请问这个是去哪里查的? 07/15 17:31
2F:→ Killercat:其实不全对,不过基本上很类似 07/16 03:20
4F:→ Killercat:他真正所有alloc的动作在_objc_rootAlloc里面 07/16 03:21
5F:→ Killercat:现在都用class_createInstance全包了 不再由外面分开好 07/16 03:22
6F:→ Killercat:几动来慢慢做 07/16 03:22
7F:推 Killercat:不过calloc或多或少其实已经包含了一点init的意思了... 07/16 03:28