如何按名称创建objective-c类的实例?

时间:2014-12-30 15:25:48

标签: ios objective-c iphone objective-c-runtime

我希望得到类似的东西:

#define weaken(object) ...

----

ClassABCD * abcd = [ClassABCD new];
weaken(abcd);
weakAbcd.tag = 0;

----

我有以下代码:

#define weaken(x) __weak typeof(x) weak##x = x

但它只能使用" weakabcd"而不是" weakAbcd"。知道为什么,以及如何解决它?

2 个答案:

答案 0 :(得分:0)

基于问题标题,NSClassFromString()将执行此操作。根据你提供的代码,我不太确定这两个匹配。

这是我的一个项目中的一行,我根据我在其他地方定义的字符串变量prefCellClassName创建了一个UITableViewCell子类实例。 (为了完整性,prefCellStyle和prefCellReuseIdentifier也是我在其他地方定义的变量。)

        cell = [[NSClassFromString(prefCellClassName) alloc] initWithStyle:prefCellStyle reuseIdentifier:prefCellReuseIdentifier];

答案 1 :(得分:0)

从字符串创建一个类:

id someObject = NSClassFromString("MyClassName");

当您执行此类操作时,最好检查您的对象是否响应您尝试传递的方法,如下所示:

if ([someObject respondsToSelector:@selector(someMethod)])
{
    [someObject someMethod];
}

这样的功能使objective-c成为动态语言