在启用ARC的情况下使用reinterpret_cast

时间:2012-05-04 15:50:13

标签: c++ objective-c automatic-ref-counting reinterpret-cast

我在启用ARC的Objective-C项目中包含了一个库的头文件。

我知道库没有启用ARC编译,但问题是库的头文件,特别是这些行:

template <typename Type_>
static inline Type_ &MSHookIvar(id self, const char *name) {
    Ivar ivar(class_getInstanceVariable(object_getClass(self), name));
    void *pointer(ivar == NULL ? NULL : reinterpret_cast<char *>(self) + ivar_getOffset(ivar));
    return *reinterpret_cast<Type_ *>(pointer);
}

我收到此错误:

Cast of an Objective-C pointer to 'char *' is disallowed with ARC

是否可以修复此错误?

可在此处找到整个标头文件:http://puu.sh/sTrH

2 个答案:

答案 0 :(得分:5)

您需要将pointer的初始化更改为:

void *pointer(ivar == NULL ? NULL : reinterpret_cast<char *>((__bridge void *)self) + ivar_getOffset(ivar));

答案 1 :(得分:-1)

转到项目的目标并选择Build Phases选项卡。打开“编译源”部分,找到该头文件。添加编译器标志“-fno-objc-arc”减去引号。这将导致该文件定期编译,并应该修复您的问题,假设代码在非弧环境中工作。