我从事一个Objective-C ++库项目。到目前为止,在基于C ++的代码库中,只有一个ObjC对象包装在C ++单例对象中。但是该库的客户端代码很可能会始终使用ARC。
在某些情况下,我需要将ObjC结构(即包含ObjC对象成员的结构)转换为C(++)对应对象。
我从这篇文章中读到:
http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++
那:
即使您在项目中使用ARC,我也建议您对像这样的C ++繁重的Objective-C ++文件禁用ARC。您可以使C ++代码甚至在ARC情况下也能表现出来,但是通常要比仅发布版本和保留调用多得多。
作者没有详细说明他如何得出这个结论。该帖子的最新更新时间为2012年。我想知道这背后是否存在任何重大问题,还是随着ObjC的发展而变得过时的信息。
谢谢!
我一直在使用c ++ / objc mixes和arc / no-arc没问题。在弧中唯一发生的事情是objc在大多数使用objc对象的地方自动添加保留/释放。如果您的c ++类将使用objc对象,则还需要启用objc-在这种情况下,arc仅在启用(并允许使用该文件的情况下)才起作用。否则,您需要手动保留/释放。ARC不会影响c ++内存管理,因此仅此而已。
因此,除非您想对objc对象使用void *并且在您的c ++代码中没有objc支持,否则只需遵循arc / non-arc规则,就可以了。
我的猜测是,为什么您可能希望在c ++文件中没有弧,是为了避免有时会增加弧的过度保留/释放调用-因此,基本上,如果您知道真正需要保留对象的位置(哪个编译器不知道并保留)到处都是),这样您就可以让应用进行更少的计算。同样,弱引用在错误的地方(例如c ++散列集或作为映射中的键,可能会被重新分配的地方)使用时可能会破坏事物,在简单情况下它们通常会起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句