我一直在通过Hillegass的书学习Objective-C和Cocoa,我突然想到使用Objective-C++可能会更好。Objective-C 似乎是开发 UI 的明确选择,但我有非常强大的 C++ 背景,并且很想用 C++ 开发应用程序后端并使用 Objective-C++ 进行 UI 集成。但我想知道苹果是否会继续开发 Objective-C++ 还是会成为死胡同。
有人在使用 Objective-C++ 吗?
我一直在通过Hillegass的书学习Objective-C和Cocoa,我突然想到使用Objective-C++可能会更好。Objective-C 似乎是开发 UI 的明确选择,但我有非常强大的 C++ 背景,并且很想用 C++ 开发应用程序后端并使用 Objective-C++ 进行 UI 集成。但我想知道苹果是否会继续开发 Objective-C++ 还是会成为死胡同。
有人在使用 Objective-C++ 吗?
免责声明:我不为 Apple 工作或发言,所以这是我的观点:
我不能代表主要的开发商店,但在我的小组中,我们使用 Objective-C++ 来集成 C++ 库,以及您建议用 C++ 编写后端。正如@alxp 所提到的,跨语言边界处理异常之类的事情很痛苦,但只要稍加规划,这些痛苦中的大部分都可以避免。对于有经验的 C++ 开发人员来说,所获得的收益是值得的。
在支持方面,我认为您可以假设当前状态下的支持不会很快消失。它是 GCC 代码库的一部分,并且Clang工具链(Apple 的下一个编译器工具链)完全支持 Objective-C++。另一方面,没有任何官方保证苹果会继续开发集成——例如修复一些缺陷。
对于当前的项目,我想说如果使用 Objective-C++ 有好处,那么依靠现有的支持是安全的,你应该使用它。
我使用 ObjC++ 的唯一一次是移植库以使它们可以从我的 ObjC 代码中访问。ObjC++ 和 ObjC 如何处理异常以及类创建和销毁等问题之间的冲突使得在一个项目中兼顾两种语言变得非常头疼。
我认为 Cocoa / Java 的支持不会很快消失,因为它是 GCC 的一部分,而且 Objective-C++ 编译为直接 C++ 的方式与 Objective-C 可以直接编译的方式相同C,但与 Objective-C 相比,我仍然觉得它不是一个非常愉快的软件构建环境,并且能够舒适地充分使用 OS X 提供的框架。
只要 Objective-C 还支持,Objective-C++ 就可能会继续受到支持。Obj-C++ 是clang的一个基本目标,它有望最终取代 gcc 成为 Apple 的首选编译器。随着 Carbon 应用程序转移到 Cocoa 前端,使用量可能会增加。
当然,“可能”这个词在上面出现了两次,因为苹果是如此令人兴奋地不可预测。:-)
我怀疑 Apple 会在一段时间内继续支持 Objective C++,因为随着 Apple 更新 Cocoa 和 Objective C++,我没有看到 Apple 需要任何重大的重复性工作来维护 Objective C++。
前几天,当我尝试使用 Xcode 的重构支持重构 Objective-C++ 文件中的一些 Objective-C 代码时,我感到很惊讶。即使启用了菜单项,我也得到了“无法重构 Objective-C++ 代码。Xcode 只能重构 C 和 Objective-C 代码。” 错误信息。因此,虽然 Objective-C++ 的编译将继续无限期地运行,但我怀疑 Objective-C++ 将成为 Xcode 中的二等公民。
我把它从我所有的代码中拿出来。没有 .mm 文件。
但是您需要 .cpp 文件才能与 .m 文件通信。解决方案是保持血脑屏障完整的 .c/.h 文件。
带有 Objective-C 的 C++ 通常是太多的包袱。
Objective-C 实际上只是一堆在 C 语言中模拟对象的 C 代码,它仍然使用 C 编译器,包括 Objective-C 头文件。使用 Objective-C++ 使用 C++ 编译器并将 Objective-C 头文件包含为 C 代码,因为 C++ 将运行 C 代码。Objective-C++ 本质上就是 C、C++ 和 Objective-C(实际上就是 C)