4

我在启用 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

4

2 回答 2

5

您需要将初始化更改为pointer

void *pointer(ivar == NULL ? NULL : reinterpret_cast<char *>((__bridge void *)self) + ivar_getOffset(ivar));
于 2012-05-04T17:14:30.963 回答
-1

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

于 2012-05-04T16:53:58.243 回答