【问题标题】:How well is Objective-C++ supported?Objective-C++ 的支持程度如何?
【发布时间】:2010-09-29 05:40:48
【问题描述】:

我一直在通过Hillegass book 学习Objective-C 和Cocoa,我突然想到使用Objective-C++ 可能会更好。 Objective-C 似乎是开发 UI 的明确选择,但我有非常强大的 C++ 背景,并且很想用 C++ 开发应用程序后端并使用 Objective-C++ 进行 UI 集成。 但我不知道苹果是否会继续开发 Objective-C++ 还是会成为死胡同。

有人在使用 Objective-C++ 吗?

【问题讨论】:

    标签: cocoa objective-c++


    【解决方案1】:

    免责声明:我不为 Apple 工作或发言,所以这是我的观点:

    我不能代表主要的开发人员,但在我的小组中,我们使用 Objective-C++ 来集成 C++ 库,以及您建议用 C++ 编写后端。正如@alxp 所提到的,跨语言边界的异常处理之类的事情是痛苦的,但只要稍加规划,这些痛苦中的大部分都是可以避免的。对于有经验的 C++ 开发人员来说,收获是值得的。

    在支持方面,我认为您可以假设当前状态下的支持不会很快消失。它是 GCC 代码库的一部分,Clang 工具链(Apple 的下一个编译器工具链)完全支持 Objective-C++。另一方面,没有任何官方保证 Apple 会继续开发集成——例如修复一些缺陷。

    对于当前的项目,我想说如果使用 Objective-C++ 有好处,那么依靠现有的支持是安全的,你应该使用它。

    【讨论】:

    • 我最近在我的应用程序中使用了 Objective-C++,我发现它非常有利可图。另一个问题的例子:openradar.me/6411137 不担心对 Objective-C++ 的支持:trac.webkit.org/browser/trunk/WebKit/mac/Storage/… 周围有很多 C++ 代码,将 Objective-C++ 保持在工作级别比重写大量代码更有利可图代码。
    • 几年后你如何看待Objective-C++的现状?
    • @Garet,Clang 工具链具有出色的 Objective-C++ 支持。我想说我上面的评估仍然有效。
    • Objective-C 运行时是partially written in Objective-C++。依靠它可能很安全。
    • Apple 的一些框架是用 C++ 和 Objective-C++ 编写的。只需看一下 AppKit 和相关框架中的一些堆栈跟踪。苹果工程师也提到了这一事实,例如在各种 WWDC 会谈中。可以肯定的是,只要 OS X(和 iOS)还活着,Obj-C++ 不会很快消失——如果真的消失的话。
    【解决方案2】:

    我使用 ObjC++ 的唯一一次是移植库以使它们可以从我的 ObjC 代码中访问。 ObjC++ 和 ObjC 如何处理异常以及类创建和销毁等问题之间的冲突使得在一个项目中同时兼顾两种语言变得非常头疼。

    我认为 Cocoa / Java 的支持不会很快消失,因为它是 GCC 的一部分,而且 Objective-C++ 编译为直接 C++ 的方式与 Objective-C 可以编译的方式相同一直到纯 C,但与 Objective-C 相比,我仍然觉得它不是一个非常令人愉快的软件构建环境,并且能够舒适地充分使用 OS X 提供的框架。

    【讨论】:

      【解决方案3】:

      Objective-C++ 很可能与 Objective-C 一样受到支持。 Obj-C++ 是clang 的基本目标,预计最终将取代 gcc 成为 Apple 的首选编译器。随着 Carbon 应用程序转移到 Cocoa 前端,使用量可能会增加。

      当然,“可能”这个词在上面出现了两次,因为 Apple 令人兴奋地难以预测。 :-)

      【讨论】:

        【解决方案4】:

        我怀疑 Apple 会在一段时间内继续支持 Objective C++,因为随着 Apple 更新 Cocoa 和 Objective C++,我认为 Apple 不需要任何重大的重复性工作来维护 Objective C++。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

            带有 Objective-C 的 C++ 通常是太多的包袱。

            【讨论】:

              【解决方案7】:

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

              【讨论】:

              • 我可能是错的,但我认为您不能将 Objective-C 编译为常规 C 代码。
              • 那么为什么没有客观的 c 编译器之类的东西。只要我包含目标 C 头文件,我将 gcc 编译器用于 c 和目标 c,而 g++ 用于 c++ 和目标 c++
              猜你喜欢
              • 2013-06-10
              • 2011-10-01
              • 2012-05-18
              • 1970-01-01
              • 2012-06-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多