我知道原型和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