2

所以我有一堂课MyClass。它的名字是char * myclasses[]. 我想使用 objc 运行时 api 分配它。
1)这是最好的方法吗?我的目标是在真正需要使用它们之前不分配 10 或 15 个 ViewController,并且也没有巨大的 switch 语句来创建它们。

Class aClass = NSClassFromString ( [NSString stringWithUTF8String:myclasses[1]] );
id myClass = class_createInstance(aClass, 0);

我也试图了解注册课程..

2)由于我不是在运行时创建一个新类(只是分配),我不应该注册它,对吗?
3) 课程注册如何正常进行?(请随时将我指向某处的文件)。

4

2 回答 2

6

1) class_createInstance 与 +alloc 没有明显区别。我建议只打电话

[aClass alloc]

(然后-init*像往常一样,当然)。无需使用 ObjC 运行时函数进行正常分配。

2) 对,不用注册

3)动态类创建是一项棘手的工作,但基本上你用 分配一个类(不是该类的实例) ,然后用andobjc_allocateClassPair向它添加 ivars 和方法,然后用它调用。之后就可以正常使用了。class_addMethodclass_addIvarobjc_registerClassPair

于 2013-04-02T17:42:10.283 回答
1

如果您将类名作为 C 字符串,则可以执行以下操作:

const char * classNames[] = {
    "NSObject"
} ;

[ [ objc_getClass( classNames[0] ) alloc ] init ] ;

但是你可以只保留一个 NSStrings 列表:

NSString * classNames[] = {
    @"NSObject"
} ;

[ [ NSClassFromString(classNames[0]) alloc ] init ] ;
于 2013-04-02T17:49:04.020 回答