在 Xcode 4.5 中编译旧项目时,会出现警告:
'__bridge' 强制转换在不使用 ARC 时无效
消除此警告的正确方法是什么,以使代码在 ARC 和非 ARC 项目中都能正常工作?
在 Xcode 4.5 中编译旧项目时,会出现警告:
'__bridge' 强制转换在不使用 ARC 时无效
消除此警告的正确方法是什么,以使代码在 ARC 和非 ARC 项目中都能正常工作?
任何单独的源文件都必须使用 ARC 编译或不使用 ARC 编译。您应该下定决心,并始终对特定的源文件使用该方法。如果您坚持内存管理命名约定,您可以在同一个项目中混合使用 ARC 和非 ARC 源文件。
我上面说的原因是,如果你有为 ARC 编写的代码并且你在没有 ARC 的情况下编译它,那么由于所有的保留、释放和自动释放的事实,整个地方都会出现内存泄漏和过早的释放缺失。
使用一些#define
's 很可能编写为 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
as 中1
的一个,而其他两个 as 0
。你可以把它放在你的项目前缀头(.pch)中。
您可以在代码中直接使用这些定义来包含/排除诸如桥接演员之类的内容;或者更好地定义用于内存调用、强制转换等的宏,这些宏会根据使用的内存模型扩展为适当的代码。
高温高压
只需为该文件打开 ARC:
-fobjc-arc
(转到构建阶段 > 编译源 > 编译器标志)