在.mm文件中混合使用Objective C和C++时,是否存在任何陷阱?如果可能的话,我应该优先考虑纯ObjC吗?
在.mm文件中混合使用Objective C和C++时,是否存在任何陷阱?如果可能的话,我应该优先考虑纯ObjC吗?
除了“Objective-C编程指南”中描述的Objective-C++部分所述的注意事项外,Objective-C++并没有什么可怕的地方。然而,它比Objective-C编译时间要长得多,并且在头文件中使用C++会使任何包含该头文件的代码受到Objective-C++要求的影响。因此,为了您的理智和您代码的任何客户的理智,请尽可能在“公共”API中使用Objective-C,在必要时使用Objective-C++。
#ifdef __cplusplus
来包含感染。例如,在声明C++对象作为实例变量时,可以使用#ifdef
将它们声明为void *
,当编译为Objective-C时,将其编译为Objective-C ++时,则声明为ClassName *
。 - Sherm Pendley我不确定使用Objective-C++会出现什么问题,但我个人建议为了清晰和代码可读性而坚持使用纯Objective-C。如果您计划使用一些特定的C++库,则在项目中使用Objective-C++的好方法是将所有C++功能保留在单独的C++类文件中,这样当您在.mm文件中使用C++对象时,可以将obc-c和c++代码混合使用降至最低。当我开始IOS开发时,我使用Objective-C++编写了几个项目,但随着我对Cocoa及其强大功能的理解越来越深入,我发现使用C++的欲望逐渐减少,因为坚持使用obj-c和cocoa框架更好、更简单。