在创建新类时,我倾向于默认使用.mm扩展名,以便我可以在以后使用ObjC ++。
这样做有什么不利吗?你什么时候想要.m
? .m
是否编译为更快的可执行文件(因为C通常比C ++更快)?
答案 0 :(得分:44)
使用.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中更好地编码,反之亦然。因此,与往常一样,使用适当的工具来完成工作。
供参考,您可能也对此答案感兴趣:C vs C++ (Objective-C vs Objective-C++) for iPhone
更新2012年2月17日从Xcode 4.0(使用LLVM 3.0)开始,Clang支持Objective-C ++。即使是C ++ 11支持也非常强大。
答案 1 :(得分:8)
如果您只使用C功能,.mm文件应生成与.m
非常相似的代码当您需要C ++功能时,将文件从.m重命名为.mm也没有任何缺点