30

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

这样做有什么缺点吗?你喜欢什么时候.m?是否.m编译为更快的可执行文件(因为 C 通常比 C++ 快)?

4

2 回答 2

47

对“普通”Objective-C使用.mmover的主要缺点.m是 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 支持现在也相当强大。

于 2010-02-23T20:08:07.390 回答
8

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

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

于 2010-02-23T15:39:57.593 回答