为啥在 Mailcore2 Sample 中的“MCOMessageView”文件是一个 c++ 文件而不是目标 c 文件?

Posted

技术标签:

【中文标题】为啥在 Mailcore2 Sample 中的“MCOMessageView”文件是一个 c++ 文件而不是目标 c 文件?【英文标题】:Why In Mailcore2 Sample the 'MCOMessageView' file is a c++ file instead of objective c one?为什么在 Mailcore2 Sample 中的“MCOMessageView”文件是一个 c++ 文件而不是目标 c 文件? 【发布时间】:2016-12-21 11:26:33 【问题描述】:

我正在检查来自 mailcore 2 示例演示的源代码。 ios 项目有一个类'MCOMessageView.mm'。这是一个非常好的帮助类,带有一个 webview 和一些用于 html 渲染的委托。那么为什么使用'mm'作为它的文件扩展名,因为它不包含任何c++代码。

【问题讨论】:

因为原因。以何种方式认为这对 SO 来说是一个有效的问题? @Avi 示例项目由 mailcore2 的工程师制作。我想知道他们在设置此类扩展名'mm'时的考虑是什么。 推测的事情是题外话。询问 mailcore 的工程师。 @Avi Mailcore 工程师更喜欢在 github 中提到的 *** 中回答问题。 他们的工程师无法为 SO 设置策略。我碰巧同意弗洛里安的回答,但这个问题仍然不合适,因为它纯粹是猜测,也不是解决编程问题。 【参考方案1】:

一些开发人员,习惯于处理 ObjC++,默认使用 .mm 扩展名作为他们的 ObjC 类,即使不需要 C++ 代码,这样他们以后可以在需要时使用 ObjC++。

MailCore默认使用ObjC++,所以默认为.mm类的扩展名,即使当时没有C++代码,以后也可以添加。

它几乎不需要运行时间,所以它只是一种做事方式。而且自从 LVVM 以来,它在构建时几乎没有成本

另一种可能性是他们在文件的先前版本中是 C++,并且在提交后提交,C++ 代码被替换,他们没有费心重命名类,因为他们将来仍然可以添加一些 C++ 代码并且他们想要让他们腾出手来。

【讨论】:

【参考方案2】:

使用 .mm 的原因是它会提示 Xcode 它需要 C++ 运行时来链接最终的二进制文件。 如果我使用 .m,我将不得不显式传递一个标志。

【讨论】:

以上是关于为啥在 Mailcore2 Sample 中的“MCOMessageView”文件是一个 c++ 文件而不是目标 c 文件?的主要内容,如果未能解决你的问题,请参考以下文章

线程“main”中的异常 java.lang.ClassNotFoundException: sample.Main - 为啥?

为啥 spark 中的 sample 和减去方法会给出这样的结果

在 Swift 中发送 Mailcore2 普通电子邮件

sample.int(m, k) 中的错误:无法获取大于总体的样本

mailcore2如何在swift中实现它

Mailcore2 - 从特定日期开始搜索电子邮件