在静态 iOS 库中强制 ARC

Force ARC in static iOS library

我正在维护一个静态 iOS 库,我是从一位使用 Xcode 和 Objective-C 的前同事那里继承来的。代码包含很多

#if __has_feature(objc_arc) 

我想知道我是否可以假设 arc 始终可用?该库已分发给客户,因此另一个问题是:在我 "forced" 使用 arc 之后,他们是否可能必须更改某些内容才能使用我的库?我已经尝试找到有关它的一些东西,到目前为止,在我看来,您可以在非弧项目中使用弧框架。但我不确定我是否做对了,而且我不希望任何客户因此而做额外的工作。

如果您以编译形式分发它,那么是的,它要么启用 ARC,要么不启用,这完全在您的控制之下。二进制文件的用户之后无法更改它; ARC "happens" 在 compile-time.

如果您将其作为源代码分发,您可以记录对 ARC 的要求,如果缺少它,则通过在一个地方放置类似的保护 来发出编译错误:

#if !__has_feature(objc_arc)
#error "MyLibrary requires compilation with ARC"
#endif

并移除散落在周围的所有其他人。

最后,使用 ARC 编译的代码可以与 non-ARC 代码自由链接。如果 MRR 代码没有进行适当的内存管理,就会出现唯一的问题,但我会将其归类为该代码 中现有错误 的说明,而不是 引起的问题通过 使用 ARC。