不使用ARC时,'__ bridge'强制转换无效

时间:2012-09-20 09:10:43

标签: objective-c ios6 xcode4.5

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

  不使用ARC

时,

'__ bridge'强制转换无效

摆脱此警告的正确方法是什么,以便代码在ARC和非ARC项目中都能正常运行?

3 个答案:

答案 0 :(得分:5)

任何单个源文件都必须使用ARC编译或不使用ARC编译。你应该下定决心,并始终将该方法用于特定的源文件。如果您遵守内存管理命名约定,则可以在同一项目中混合使用ARC和非ARC源文件。

我说上面的原因是,如果你有为ARC编写的代码并且你在没有ARC的情况下编译代码,那么整个地方都会有内存泄漏和过早的解除分配,这要归功于所有的保留,发布和自动释放丢失。

答案 1 :(得分: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)中。

您可以直接在代码中使用这些定义来包含/排除桥接转换等内容;或者更好地为内存调用,转换等定义宏,这些宏根据使用的内存模型扩展到适当的代码。

HTH

答案 2 :(得分:0)

只需为该文件启用ARC:

-fobjc-arc

(转到构建阶段>编译源代码>编译器标志)