纯ObjC(.m)与ObjC和Cpp(.mm)混合的区别

3

在.mm文件中混合使用Objective C和C++时,是否存在任何陷阱?如果可能的话,我应该优先考虑纯ObjC吗?


除非您正在使用或开发C++跨平台库,否则我会质疑您是否需要使用C++。为什么要引入C++的受损对象模型,当您已经拥有Objective-C更符合“真正精神”的模型呢? - JeremyP
2个回答

8

除了“Objective-C编程指南”中描述的Objective-C++部分所述的注意事项外,Objective-C++并没有什么可怕的地方。然而,它比Objective-C编译时间要长得多,并且在头文件中使用C++会使任何包含该头文件的代码受到Objective-C++要求的影响。因此,为了您的理智和您代码的任何客户的理智,请尽可能在“公共”API中使用Objective-C,在必要时使用Objective-C++。


我再强调"注意导入"的部分的重要性。在我将那个 .m 文件改成了 .mm 文件之前,我得到了无数个毫无意义的错误。 - Eiko
1
大多数人都同意,但是可以通过在头文件中小心使用#ifdef __cplusplus来包含感染。例如,在声明C++对象作为实例变量时,可以使用#ifdef将它们声明为void *,当编译为Objective-C时,将其编译为Objective-C ++时,则声明为ClassName * - Sherm Pendley

0

我不确定使用Objective-C++会出现什么问题,但我个人建议为了清晰和代码可读性而坚持使用纯Objective-C。如果您计划使用一些特定的C++库,则在项目中使用Objective-C++的好方法是将所有C++功能保留在单独的C++类文件中,这样当您在.mm文件中使用C++对象时,可以将obc-c和c++代码混合使用降至最低。当我开始IOS开发时,我使用Objective-C++编写了几个项目,但随着我对Cocoa及其强大功能的理解越来越深入,我发现使用C++的欲望逐渐减少,因为坚持使用obj-c和cocoa框架更好、更简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接