Index: src/runtime/class.m ================================================================== --- src/runtime/class.m +++ src/runtime/class.m @@ -180,10 +180,26 @@ c = (Class)objc_hashtable_get(classes, name); objc_global_mutex_unlock(); return c; } + +static void +call_initialize(Class cls) +{ + struct objc_method_list *ml; + SEL initialize; + unsigned int i; + + initialize = sel_registerName("initialize"); + + for (ml = cls->isa->methodlist; ml != NULL; ml = ml->next) + for (i = 0; i < ml->count; i++) + if (sel_isEqual(&ml->methods[i].sel, initialize)) + ((void(*)(id, SEL))ml->methods[i].imp)(cls, + initialize); +} inline Class objc_lookup_class(const char *name) { Class cls = objc_classname_to_class(name); @@ -223,12 +239,11 @@ objc_update_dtable(cls->isa); cls->info |= OBJC_CLASS_INFO_INITIALIZED; cls->isa->info |= OBJC_CLASS_INFO_INITIALIZED; - if (class_respondsToSelector(cls->isa, @selector(initialize))) - [cls initialize]; + call_initialize(cls); objc_global_mutex_unlock(); return cls; }