我是一个有点称职的 ruby 程序员。昨天我决定最终尝试使用 Apple 的 Cocoa 框架。帮助我以 ObjC 的方式看待事物?
我正在努力了解 objc_allocateClassPair
和 objc_registerClassPair
。我的目标是动态生成一些类,然后能够像使用任何其他类一样使用它们。这在 Obj C 中有效吗?
分配并注册类 A
后,调用 [[A alloc] init];
时出现编译错误(显示为 'A' Undeclared
)。我只能使用运行时的 objc_getClass
方法实例化 A
。有什么方法可以告诉编译器有关 A
的信息,并像我向 NSString
那样传递消息吗?编译器标志或其他东西?
我有 10 个左右的其他类(B
、C
、...),它们都具有相同的父类(super class)。我想直接在代码中向它们发送消息([A classMethod]
、[B classMethod]
、...)而不需要 objc_getClass
。我是想在这里过于动态还是只是在搞砸我的实现?看起来像这样……
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.
最佳答案
[[A alloc] init];
崩溃的原因是编译器不知道A
是什么意思。编译器永远不知道 A
甚至在那里。
编辑:此外,看起来您想要的是:
@interface A : NSObject {
NSString *myString;
}
- (id)initWithString:(NSString *)string;
- (void)doItToIt;
@end
或许
@interface NSString (MyPrivateExtension)
- (void)doItToIt;
@end
关于objective-c - 在 Objective C 中构建动态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2447497/