纯ObjC(.m)与ObjC&Cpp(.mm)混合

问题描述:

当在.mm文件中混合使用Objective C & C++时,是否存在任何缺陷?是否应该在可能的情况下坚持使用纯粹的ObjC?纯ObjC(.m)与ObjC&Cpp(.mm)混合

+0

除了在C++中使用或开发跨平台库之外,我会质疑是否需要使用C++。为什么在已经有Objective-C更“真正的精神”模型中引入C++的受损对象模型? – JeremyP 2011-04-06 14:23:52

除了Objective-C编程指南的Objective-C++部分所述的注意事项外,Objective-C++没有什么可怕的。编译的时间比Objective-C长,然而在头文件中使用C++会感染任何包含Objective-C++需求的头文件的代码。因此,为了您的理智,以及代码的任何客户端的理智,必要时尽可能在“公共”API和Objective-C++中使用Objective-C。

+0

我不能强调“注意进口”的部分。直到我最终将这个.m转换为.mm,我得到了无数毫无意义的错误。 – Eiko 2011-04-06 13:11:09

+1

大部分都同意,但是可以在一个头文件中仔细使用'#ifdef __cplusplus'来包含感染。例如,在将C++对象声明为实例变量时,可以使用'#ifdef'在编译为Objective-C时将其声明为'void *',在编译为Objective-C++时将'ClassName *'声明为实例变量。 – 2011-04-06 18:24:21

我不确定使用Objective-C++会产生什么问题,但我个人会建议坚持使用纯粹的Objective-C来提高清晰度和代码可读性。如果您打算使用某些特定的C++库,那么在您的项目中使用objective-C++的一个好方法是将所有C++功能保存在单独的C++类文件中,这样当您在您的C++中使用C++对象时就是如此。 mm文件,你可以将obc-c和C++代码混合到最小。当我第一次启动IOS dev时,我使用Objective-C++编写了一些项目,但是我越来越了解Cocoa及其功能,我发现使用C++的渴望减少了,因为它更好更简单,只需坚持使用obj-c和可可框架。