Как class_createInstance (класс cls, size_t extraBytes) реализуется Objective C? - PullRequest
1 голос
/ 29 марта 2012

Я знаю прототип и аргументы эта функция принимает

id class_createInstance(Class cls, size_t extraBytes)

но где я могу найти его реализацию? Это просто malloc или ...

1 Ответ

2 голосов
/ 29 марта 2012

Это больше, чем просто malloc, поскольку объект должен быть инициализирован и т. Д. Это реализация 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;
}
...