在工程中,你可以混合搭配支持ARC与不支持ARC的代码,方法是使用-fno-objc-arc
和-fobjc-arc
两个编译器标志。在后面的内容中,你会明白何时使用哪个标志。你甚至可以在相同的类中混合搭配支持ARC与不支持ARC的代码!
编译时支持ARC而文件的代码不支持ARC
#if !__has_feature(objc_arc)
//这里是不支持ARC的代码
-(void) release {
//在这里释放变量
}
#endif
Clang语言扩展__has_feature
类函数宏非常强大。你可以对任何支持Clang语言特征并符合相应条件的代码进行条件编译。
当你使用了没有通过ARC编译的第三方框架时,编译库里面的文件时需要使用-fno-objc-arc
编译器开关。(关于如何为文件添加编译器开关的内容参见第2章。)在第2章中,我们学习了如何使用Xcode的Convert
to Objective-C ARC工具。在使用这个工具进行移植时,可以在列表中选择不可以移植的文件(参见图2-10)。移植工具会自动为所有这些排除的文件添加-fno-objc-arc
编译器开关。如果你没有添加这一开关,ARC编译器遇到第三方库中的retain
和release
语句时就会抛出错误。
有时,你会找到通过ARC编译的第三方库。在非ARC工程中使用这些代码时,你并不会在编译时遇到错误,而是会面临内存泄漏问题。为了避免这类情况的发生,需要使用-fobjc-arc
来标记这些通过ARC编译的第三方源代码。
如果是编写框架,无论是将其开源发布还是共享给公司中的其他团队,你都应该提示使用你的代码的开发人员:这些文件需要使用ARC来编译。在非ARC工程中使用支持ARC的代码会导致内存泄漏,所以你有责任提示开发人员。比如,你可以使用如下所示的宏:
#if ! __has_feature(objc_arc)
#error This file is ARC only.
#endif
这段代码看起来应该很熟悉,因为之前讲解Clang语言扩展的时候谈及过。
http://www.ituring.com.cn/article/25262
http://www.ituring.com.cn/article/25265
分享到:
相关推荐
代码素材 Arc Curve Outside代码素材 Arc Curve Outside代码素材 Arc Curve Outside代码素材 Arc Curve Outside代码素材 Arc Curve Outside代码素材 Arc Curve Outside代码素材 Arc Curve Outside代码素材 Arc Curve...
韩鹏的ARCENGINE 源韩鹏的ARCENGINE 源代码韩鹏的ARCENGINE 源代码代码
ArcEngine中实现鹰眼图程序的详细代码
韩鹏的ARCEN韩韩鹏的ARCENGINE 源代码鹏的ARCENGINE 源代码GINE 源代码
ArcEngine开发常用代码,一般功能里面都有。
开发环境:C#+ArcEngine10.2+vs2010 《GIS程序设计教程》主要介绍了组件式GIS开发技术,重点是利用ArcGISEngine开发组件库,在.Net环境下利用C#语言进行GIS程序开发。全书由浅人深,从组件式GIS基本概念入手,介绍...
,ArcEngine椭球面积计算代码,基于ArcGIS写的多边形椭球面积计算
arcengine 中添加text的代码
arcengine地图的基本操作代码与查询分析代码 vb.net
命名空间“http://schemas.microsoft.com/expression/2010/drawing”中不存在“Arc”名称。 未找到类型“ed:Arc”。请确保不缺少程序集引用并且已生成所有引用的程序集。
支持ARC的AsyncSocket类下载
C#+ArcEngine 打开mxd地图文档(窗体+代码)
利用C++与ArcScene结合的动画示例
ArcGlobe,ArcScene的飞行的代码一样!!!
ArcEngine地理信息系统开发入门到精通第二版 光盘源代码
ArcScene三维制作ArcScene三维制作ArcScene三维制作ArcScene三维制作
ArcEngine空间分析代码,主要以方法的形式呈现
ArcEngine基本功能代码和文档,部分功能如下: 1、符号选择框制作 2、空间分析-Union联合分析 3、地图五种渲染功能 4、几何运算点缓冲区查询功能制作 5、空间分析-merge融合分析 6、clip裁剪分析 7、空间参考功能 8...
AE缓冲区代码 + ArcEngine连接表join