我知道原型和arguements該功能只ObjectiveC如何實現class_createInstance(Class cls,size_t extraBytes)?
id class_createInstance(Class cls, size_t extraBytes)
,但我在哪裏可以找到它的實現?難道僅僅是malloc的或...
我知道原型和arguements該功能只ObjectiveC如何實現class_createInstance(Class cls,size_t extraBytes)?
id class_createInstance(Class cls, size_t extraBytes)
,但我在哪裏可以找到它的實現?難道僅僅是malloc的或...
它更多的只是malloc
作爲對象需要被initialsed等,這將GNUstep實現:
id class_createInstance(Class cls, size_t extraBytes)
{
CHECK_ARG(cls);
if (sizeof(id) == 4)
{
if (cls == SmallObjectClasses[0])
{
return (id)1;
}
}
else
{
for (int i=0 ; i<4 ; i++)
{
if (cls == SmallObjectClasses[i])
{
return (id)(uintptr_t)((i<<1)+1);
}
}
}
if (Nil == cls) { return nil; }
id obj = gc->allocate_class(cls, extraBytes);
obj->isa = cls;
call_cxx_construct(obj);
return obj;
}
Gah,那是危險的代碼... – 2012-03-29 13:38:59
但是對於初始化我們有-init方法 – tusharfloyd 2012-03-30 05:11:14
蘋果提供源[用於ObjC運行時(http://opensource.apple.com/source/objc4/)。 – 2012-03-29 17:52:59
我搜索了它,但找不到實現,而只是原型 – tusharfloyd 2012-03-30 05:10:31
@tusharfloyd它在'objc-runtime-new.mm'中。這幾乎就是調用'calloc',設置'isa'指針,並在必要時調用C++構造函數。 – 2012-04-02 06:57:04