不使用ARC时,“__bridge”转换无效。

4

在Xcode 4.5中编译旧项目时,出现以下警告:

“当不使用ARC时,'__bridge'转换没有效果”

有什么正确的方法可以消除此警告,并使代码在ARC和非ARC项目中都能正常工作?

3个回答

5
任何单独的源文件必须使用ARC编译或者不使用ARC编译。您应该明确选择一种方法,并始终为特定的源文件使用该方法。只要遵循内存管理命名约定,您可以在同一项目中混合使用ARC和非ARC源文件。
之所以提出上述观点是因为如果您编译没有使用ARC的ARC代码,则会出现各种内存泄漏和过早释放的问题,这是由于所有保留、释放和自动释放都已丢失所致。

0

通过几个#define,我们可以编写源文件,使其能够正确编译MRC、ARC和GC。

Xcode不允许同时启用ARC和GC,但我们可以这样编写:

#if defined(__OBJC_GC__)
#  define USING_GC 1
#else
#  define USING_GC 0
#endif

#if __has_feature(objc_arc)
#  define USING_ARC 1
#else
#  define USING_ARC 0
#endif

#if USING_ARC || USING_GC
#  define USING_MRC 0
#else
#  define USING_MRC 1
#endif

这将定义USING_GCUSING_MRCUSING_ARC中的一个为1,另外两个为0。您可以将其放在项目的前缀头文件(.pch)中。

您可以直接在代码中使用这些定义来包含/排除诸如桥接转换之类的内容;或者更好的是定义内存调用、强制转换等宏,这些宏会根据所使用的内存模型扩展到适当的代码。

希望对您有所帮助。


0

只需为该文件打开 ARC:

-fobjc-arc

(前往“Build Phases”>“Compile Sources”>“Compiler Flags”)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接