如何在弧中替换class_createInstance?

时间:2011-11-23 23:10:41

标签: xcode4 ios5 automatic-ref-counting

我有这个代码,需要将它移植到弧线,但我不知道如何:

        case FIELDTYPE_OBJECT:
            className = [fieldType substringWithRange:NSMakeRange(2, [fieldType length]-3)];
            rel =  class_createInstance(NSClassFromString(className), sizeof(unsigned));
            Class theClass = [rel class];

            if ([rel isKindOfClass:[DbObject class]]) {
                //Load the record...
                NSInteger Id = [rs intForColumn:[theClass relationName]];
                if (Id==0) {
                    fieldValue = [rel init];
                } else {                    
                    Db *db = [Db currentDb];

                    fieldValue = [db loadById: theClass theId:Id];
                }
            }
            break;

错误是:

error: 'class_createInstance' is unavailable: not available in automatic reference counting mode

如何替换它?

我需要在运行时构建类对象。

3 个答案:

答案 0 :(得分:3)

最直接的解决方案是添加另一个文件,其中设置了-fno-objc-arc,并且其函数调用了如上所述的class_createInstance()。

答案 1 :(得分:1)

试试这个:

#include <objc/objc-runtime.h>
id object = [[NSClassFromString(@"TheClassName") alloc] init];

答案 2 :(得分:1)

创建一个单独的.h / .c 文件并添加如下内容。

id const
MyCreateInstanceOfClass(Class const class)
{
    id      instance    =   class_createInstance(class, 0);
    return  instance;
}

#include .h,并将其调用。无需为每个文件添加-fno-bjc-arc开关。