在Xcode 4.5中编译旧项目时,会出现警告:
不使用ARC 时,'__ bridge'强制转换无效
摆脱此警告的正确方法是什么,以便代码在ARC和非ARC项目中都能正常运行?
答案 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_GC
,USING_MRC
和USING_ARC
中的一个定义为1
,将其他两个定义为0
。您可以将它放在项目前缀标题(.pch)中。
您可以直接在代码中使用这些定义来包含/排除桥接转换等内容;或者更好地为内存调用,转换等定义宏,这些宏根据使用的内存模型扩展到适当的代码。
HTH
答案 2 :(得分:0)
只需为该文件启用ARC:
-fobjc-arc
(转到构建阶段>编译源代码>编译器标志)