我正在维护一个静态iOS库,我使用Xcode和Objective-C继承了前同事。代码包含很多
#if __has_feature(objc_arc)
我想知道我是否可以假设弧总是可用的?该库被分发给客户,因此另一个问题是:在“强制”使用arc之后,他们是否可能需要更改某些内容才能使用我的库?我已经试图找到一些关于它的东西,到目前为止我觉得你可以在非弧项目中使用弧框架。但我不能完全确定我是否做到了这一点,而且我也不希望任何客户为此做额外的工作。
答案 0 :(得分:3)
如果您以编译的形式分发它,那么是的,它既可以使用ARC,也可以不使用ARC,并且完全由您控制。二进制文件的用户之后无法对其进行更改; ARC"发生"在编译时。
如果您将其作为来源进行分发,则可以记录ARC的要求,如果缺少类似的后卫,则会发出编译错误 :
#if !__has_feature(objc_arc)
#error "MyLibrary requires compilation with ARC"
#endif
并删除散落在周围的所有其他人。
最后,使用ARC编译的代码可以与非ARC代码自由链接。唯一的问题是,如果MRR代码没有进行适当的内存管理,但我会将其归类为该代码中现有错误的展示,而不是由引起的问题使用ARC。