Objective-C,.m/.mm的性能差异?

Sam*_*Sam 29 iphone objective-c objective-c++

在创建新类时,我倾向于默认使用.mm扩展名,以便我可以在以后使用ObjC++.

这样做有什么不利吗?你.m什么时候喜欢?并.m编译成可执行更快(这是由于C通常比C++更快)?

Bar*_*ark 45

使用的主要缺点.mm超过.m了"正常"的Objective-C是编译时间是Objective-C的显著高于++.这是因为C++编译器比C编译器花费更长的时间.使用Xcode 3.2及更高版本,Objective-C代码可以使用Clang前端工具链来显着加快Objective-C/C编译时间.由于Clang还不支持Objective-C++/C++,这进一步扩大了两者之间编译时间的差距.

更好的策略是.m默认使用.如果您稍后需要在开发中使用Objective-C++,则重命名文件以使用.mm扩展名没有任何害处.如果是这样,那么在XCode中,项目将自动更新以使用新命名的文件.

当然,一旦您尝试在运行时比较Objective-C++与Objective-C性能,所有标准警告都适用.由于Objective-C++是C++超集,而Objective-C是C超集,因此您处理两种不同的语言,每种语言在运行时都具有性能权衡.鉴于您完全使用Objective-X,您可能正在编写用户级应用程序(而不是系统级应用程序),C和C++之间的性能差异可能完全取决于您编写高效算法的能力.每种语言.如果您是C++开发人员,那么您可能会比C语言编码更好,反之亦然.因此,与往常一样,使用适当的工具来完成工作.

作为参考,您可能也对此答案感兴趣:适用于iPhone的C vs C++(Objective-C vs Objective-C++)

更新2012年2月17日从Xcode 4.0(使用LLVM 3.0)开始,Clang支持Objective-C++.即使是C++ 11支持也非常强大.


rpe*_*ich 8

如果您只使用C功能,.mm文件应生成与.m非常相似的代码

当您需要C++功能时,将文件从.m重命名为.mm也没有任何缺点

  • 不推荐使用.m扩展名,实际上它是默认值.假设ObjC++是一个坏主意,因为在某些情况下C++与C不同(符号重整是最明显的,但还有很多其他的).在.c文件中允许使用C++也是错误的 - 它们是两种不同的语言. (9认同)