objective-c - 为什么在 Objective-C 库中使用 ARC 时会出现警告?

标签 objective-c memory-management

我对 Objective-C 还很陌生,目前正在阅读有关内存管理的内容。我想将 ARC 用于我们的共享库,但在 Advanced Memory Management documentation 中这样做有一个有点神秘的警告:

If you plan on writing code for iOS, you must use explicit memory management (the subject of this guide). Further, if you plan on writing library routines, plug-ins, or shared code—code that might be loaded into either a garbage-collection or non-garbage-collection process—you want to write your code using the memory-management techniques described throughout this guide.

我认为第一句话已经过时,因为 iOS 4 及更高版本似乎支持 ARC,但第二句话似乎暗示对于共享库,我们应该使用 MRR 而不是 ARC。

我不清楚为什么这样做会出现问题,因为我认为一旦编译,调用代码应该没有区别,因为引用计数调用将由编译器插入。将 ARC 用于共享库真的有问题吗?

最佳答案

引用的部分措辞很尴尬,并且可能与该指南仅区分手动保留释放和垃圾收集时没有改变。

iOS 不支持垃圾收集,而且可能永远不会支持垃圾收集。不过,正如您所指出的,iOS 4 完全支持 ARC。此外,ARC 的设计使得将 ARC 代码与非 ARC 代码混合不会出现任何实际问题(与垃圾收集代码相反,垃圾收集代码没有这样的奢侈)。只要您不需要面向 iOS 4 之前的 iOS 版本,就推荐使用 ARC 方式来编写所有新代码(包括共享库代码)。

从某种意义上说,ARC 是显式内存管理,而不是手动内存管理。不过,就像我说的那样,这种措辞很尴尬,而且是在 ARC 存在之前写的。

关于objective-c - 为什么在 Objective-C 库中使用 ARC 时会出现警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9227073/

相关文章:

ios - prepareForSegue 传递索引 0 的值...始终

ios - 在运行时获取主 Storyboard

C++ 按值传递结构或对象

iphone - 使用自函数

ios - EXC_BAD_ACCESS 尝试返回 uint64_t 数字时

ios - 具有自定义委托(delegate)或数据源的 View Controller 的状态保存

ios - "one" View 中的多个 UIViewController

linux - AWS EC2 中的内存分区

iphone - 应用程序中分配了很多内存,如何解决?

unix - 操作系统中的共享内存段