I'm a somewhat competent ruby programmer. Yesterday I decided to finally try my hand with Apple's Cocoa frameworks. Help me see things the ObjC way?
I'm trying to get my head around objc_allocateClassPair
and objc_registerClassPair
. My goal is to dynamically generate a few classes and then be able to use them as I would any other class. Does this work in Obj C?
Having allocated and registered class A
, I get a compile error when calling [[A alloc] init];
(it says 'A' Undeclared
). I can only instantiate A
using runtime's objc_getClass
method. Is there any way to tell the compiler about A
and pass it messages like I would NSString
? A compiler flag or something?
I have 10 or so other classes (B
, C
, …), all with the same superclass. I want to message them directly in code ([A classMethod]
, [B classMethod]
, …) without needing objc_getClass
. Am I trying to be too dynamic here or just botching my implementation? It looks something like this…
NSString *name = @"test";
Class newClass = objc_allocateClassPair([NSString class], [name UTF8String], 0);
objc_registerClassPair(newClass);
id a = [[objc_getClass("A") alloc] init];
NSLog(@"new class: %@ superclass: %@", a, [a superclass]);
//[[A alloc] init]; blows up.