2012-03-29 93 views
0

我知道原型和arguements该功能只ObjectiveC如何实现class_createInstance(Class cls,size_t extraBytes)?

id class_createInstance(Class cls, size_t extraBytes) 

,但我在哪里可以找到它的实现?难道仅仅是malloc的或...

+4

苹果提供源[用于ObjC运行时(http://opensource.apple.com/source/objc4/)。 – 2012-03-29 17:52:59

+0

我搜索了它,但找不到实现,而只是原型 – tusharfloyd 2012-03-30 05:10:31

+1

@tusharfloyd它在'objc-runtime-new.mm'中。这几乎就是调用'calloc',设置'isa'指针,并在必要时调用C++构造函数。 – 2012-04-02 06:57:04

回答

1

它更多的只是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; 
} 
+0

Gah,那是危险的代码... – 2012-03-29 13:38:59

+0

但是对于初始化我们有-init方法 – tusharfloyd 2012-03-30 05:11:14