在Objective-C ++编码时我应该使用ARC吗?

时间:2014-10-07 17:28:14

标签: c++ ios objective-c

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

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

我从这篇文章中读到:

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

的是:

  

即使您在项目中使用ARC,我建议您将其禁用   C ++ - 像这样的重型Objective-C ++文件。你可以制作你的C ++   即使使用ARC,代码也能表现自己,但它通常比工作更多   只是放入发布并保留通话。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

因此,除非你想对objc对象使用void *并且在你的c ++代码中没有objc支持,那么只需遵循arc / non-arc规则就可以了。

我猜你为什么想要在c ++文件中没有弧是为了避免过多的保留/释放调用,这些调用有时会增加 - 所以基本上,如果你知道你真正需要保留对象的位置(编译器没有&#39) ;知道并保留在任何地方),所以你可以让应用程序少做一些计算。弱引用也可能在错误的地方使用时会破坏(例如在c ++哈希集中或作为地图中的键,可能会被重新分配的地方),在他们通常工作的简单情况下。