繁体   English   中英

用于OSX的Objective C中的库

[英]Library in Objective C for OSX

我正在创建一个用于绘制特定图形的库。 如何使其在ARC和MRC环境中都能正常工作?

您可以为在ARC中什么都不做的内存管理调用定义预处理器宏,并在MRC中调用适当的方法:

#if __has_feature(objc_arc)
# define ANRelease(obj)
# define ANAutorelease(obj) (obj)
# define ANRetain(obj) (obj)
#else
# define ANRelease(obj) [(obj) release]
# define ANAutorelease(obj) [(obj) autorelease]
# define ANRetain(obj) [(obj) retain]
#endif

可以从ARC / MRC代码中调用已编译的 MRC / ARC代码-ARC本质上是一种编译时技术,可自动将调用插入到引用计数内存管理例程中。 运行时, ARC和MRC代码可以互操作而不会出现问题。

因此,如果您打算以编译形式交付库,则可以使用MRC或ARC编写它,并且ARC和MRC项目都可以使用它。

如果您打算以源代码形式发送库,则可以[必须“,请参见下面的编辑]使用MRC进行编写。 然后,用户可以将您的库代码直接合并到MRC项目中。

要将其包含在ARC项目中,用户可以照常添加源,然后对于每个源文件,必须将文件标记为使用MRC。 这是通过在“项目”设置的“构建阶段”选项卡的“编译器源”部分中选择文件并添加标志-fno-objc-arc 该标志指示编译器将该特定源文件编译为MRC。

编辑

上面的功能过强,通常是ARC比MRC更新,然后要求在ARC项目中包括MRC源,这是通过使用-fno-objc-arc标记单个MRC文件来完成的。 但是,同样也支持相反的操作,您可以通过使用-fobjc-arc标记单个ARC文件,将ARC源包括在MRC项目中。

换句话说,Xcode具有一个项目范围的设置,即在项目设置的“构建设置”窗格中找到的“ Objective-C自动引用计数”,用于设置项目是否为MRC / ARC。 并且可以在项目设置的“构建阶段”窗格的“编译源”部分中为单个源文件反转此设置。

最简单的选择是以二进制(已编译)形式分发库,因为这避免了用户设置任何标志。

你不能

如果您选择使用ARC(建议),你有一组限制(比如你不能手动调用任何存储管理方法),您可以绕过只能将其关闭,这是不是一个真正的选择,因为你最终会与内存泄漏遍及整个代码库。

走了合理的方式是有两个不同的版本,一个与MRC和一个与ARC,但它似乎是不必要的精力。

您的用户可以使用-fobjc-arc编译器标志将基于ARC的库导入非ARC项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM