我在一个 Objective-C++ 库项目上工作。到目前为止,在我的基于 C++ 的代码库中,只有一个 ObjC 对象包含在 C++ 单例对象中。但是该库的客户端代码很可能始终使用 ARC。

在某些情况下,我需要将 ObjC 结构(即包含 ObjC 对象成员的结构)转换为它们的 C(++) 对应结构。

我从这篇文章中读到:

http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++

那:



作者没有详细说明他是如何得出这个结论的。该帖子最后更新于 2012 年。我想知道这背后是否存在任何重大问题,或者它只是随着 ObjC 的发展而过时的信息。

谢谢!

最佳答案

我一直在使用 c++/objc 混合和 arc/no-arc,没有任何问题。
arc 中唯一发生的事情是 objc 在大多数使用 objc 对象的地方自动添加了保留/释放。
如果您的 c++ 类要使用 objc 对象,那么它也需要启用 objc - 在这种情况下,arc 仅在启用(并允许文件)时才起作用。否则,您将需要手动保留/释放。 ARC 不会影响 C++ 内存管理,因此仅此而已。

因此,除非您想对 objc 对象使用 void* 并且在您的 C++ 代码中没有 objc 支持,否则只需遵循弧/非弧规则就可以了。

我的猜测为什么你可能想要在 c++ 文件中没有弧是为了避免弧有时会添加的过多保留/释放调用 - 所以基本上,如果你知道你真正需要保留对象的位置(哪个编译器不知道并保留无处不在),所以你可以让应用程序做更少的计算。此外,弱引用在错误的地方使用时可能会破坏事物(例如在 c++ 散列集合中或作为 map 中的键,可能会重新分配的地方),在简单的情况下它们通常可以工作。

关于c++ - 在 Objective-C++ 中编码时是否应该使用 ARC?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26241739/

10-14 09:11