2012-03-29 79 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

相關問題