Objective-C++ 的支持情况如何?

33
我一直通过学习Hillegass书籍来学习Objective-C和Cocoa,但我开始考虑是否最好使用Objective-C++。 尽管Objective-C似乎是开发UI的明确选择,但我非常擅长C ++并希望使用C ++开发应用程序后端,并使用Objective-C ++进行UI集成。
但我想知道苹果公司是否会继续开发Objective-C ++ 或者它是否将走向死胡同。
有人在使用Objective-C ++ 吗?
7个回答

29
免责声明:我不为苹果工作或代表其发言,以下是我的个人观点:
我不能代表主要的开发商店发言,但在我的小团队中,我们使用Objective-C++来集成C++库,并像你提出的那样在C++中编写后端。正如@alxp所提到的,跨语言边界的异常处理等问题很麻烦,但是通过一些规划,这些问题大部分都可以避免。对于有经验的C++开发人员来说,收益可能远远超过风险。
就支持方面而言,我认为您可以假设当前状态下的支持不会很快消失。它是GCC代码库的一部分,Clang工具链(苹果的下一代编译器工具链)完全支持Objective-C++。另一方面,没有任何官方保证苹果将继续开发这种集成——修复某些问题等。
对于当前的项目,我认为如果使用Objective-C++可以提供好处,那么依靠现有的支持是安全的,您应该使用它。

6
我最近在我的应用程序中使用了Objective-C++,发现它非常有用。另一个例子是问题:http://www.openradar.me/6411137不要担心对Objective-C++的支持:http://trac.webkit.org/browser/trunk/WebKit/mac/Storage/WebDatabaseQuotaManager.mm有很多C++代码存在,而且维护Objective-C++工作水平比重写大量代码更有利可图。 - MrAnonymous
几年后,您认为Objective-C++的现状如何? - That Realty Programmer Guy
3
@Garet,Clang工具链对Objective-C++的支持非常出色。我认为我之前的评估仍然成立。 - Barry Wark
5
Objective-C运行时部分使用了Objective-C++编写,依赖它应该是相当安全的。 - rob mayoff
苹果公司的多个框架都是用C++和Objective-C++编写的。只需查看AppKit及相关框架中的一些堆栈跟踪即可看出这一事实。苹果工程师在各种WWDC演讲中也提到了这一点。可以肯定的是,只要OS X(和iOS)还活着,Obj-C++可能不会很快消失——如果真的消失的话。 - Jay

7
我使用ObjC++的唯一时机是将库移植到我的ObjC代码中以使其可访问。由于ObjC++和ObjC处理异常、类创建和销毁等方面存在冲突,因此在一个项目中同时使用这两种语言会让人头痛不已。
我认为支持ObjC++不会很快消失,就像Cocoa/Java一样,因为它是GCC的重要组成部分。事实上,Objective-C++可以像Objective-C一样编译成纯C++,但与Objective-C相比,我仍然不觉得它是一个非常愉快的构建软件环境,并且无法舒适地完全使用OS X提供的框架。

4

只要 Objective-C 存在,Objective-C++ 很可能会得到支持。Obj-C++ 是 clang 的一个基本目标,预计将取代 gcc 成为苹果首选的编译器。随着 Carbon 应用程序被移植到 Cocoa 前端,使用 Obj-C++ 的可能性也会增加。

当然,上面两次出现了“可能”一词,因为苹果公司总是让人充满期待和不可预测的。


2

我认为苹果公司将在一段时间内继续支持Objective C++,因为我没有看到苹果需要花费大量精力来维护Objective C++随着苹果更新Cocoa和Objective C++。


1
前几天,我尝试使用Xcode的重构支持工具重构一个在Objective-C++文件中的Objective-C代码时感到惊讶。尽管菜单项是启用的,但我收到了“无法重构Objective-C ++代码。Xcode只能重构C和Objective-C代码。”的错误信息。因此,虽然Objective-C++的编译将继续无限期地正常运行,但我怀疑Objective-C++将成为Xcode中的二等公民。

0

我已经从所有的代码中移除了它。没有.mm文件。

但是你需要.cpp文件来与.m文件通信。解决方案是一个保持血脑屏障完整的.c/.h文件。

C++和Objective-C通常会带来太多负担。


-1

Objective-C 实际上只是一堆 C 代码,模拟了 C 语言中的对象,并且仍然使用 C 编译器包括 Objective-C 头文件。使用 Objective-C++ 则使用 C++ 编译器,在 C++ 代码中包含 Objective-C 头文件作为 C 代码,因为 C++ 可以运行 C 代码。Objective-C++ 实质上只是 C、C++ 和 Objective-C(实际上只是 C)。


1
我可能错了,但我认为你不能将Objective-C编译为普通的C代码。 - user764357
为什么没有Objective-C编译器呢?我使用GCC编译器来编译C和Objective-C,只要我包含了Objective C头文件,还有用g++来编译C ++和Objective C ++。 - Nico Cvitak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接