为什么和何时应该在iOS应用中使用C/C++代码?

5
什么时候,尤其是为什么在iOS平台开发时应该从Objective-C转换到C或C++?我确信自己缺少了什么,但据我所知,苹果公司希望开发者在Mac/iOS环境中使用Objective-C,那么我为什么要选择C/C++呢?
需要说明的一点是,我说的并不是游戏开发。对于游戏,我明白它的优点。我只是不明白当我开发一个客户端或类似的东西(再次强调,不是游戏)时,为什么要使用C。我需要的所有类都已经存在,而且全部都是Objective-C。

7
我可能会因此受到谴责,但无论如何,Objective-C一开始就并不是一个设计良好的语言,而且在功能上远不及C++。因此,在很多方面,如果你掌握了C++,留在它身边会更有益处。只有当你别无选择时才使用Objective-C。 - Gene Bushuyev
5
@GeneBushuyev认同Objective-C一开始设计得不好,但C++也不是。 (我记得Objective-C比C ++还要早几年,但它们在80年代初相差不到一两年)。自那时以来,这两种语言都有了很大的发展,并走向了不同的方向。它们现在都是相当不错的语言,但用途不同。除非没有其他选择,否则建议不要使用它似乎有点极端。 - Michael Anderson
谢谢大家的评论和答案。我以为我不知道使用其中一种的“非常重要的超级原因”。现在这一切对我来说都更有意义,更清晰了。 - Alex Bush
现在我只是不知道该选择哪个答案作为正确的:D - Alex Bush
如果我是你,我会选择hotpaw2的答案。它是最详尽的。 - Matt Wilding
@GeneBushuyev,你的回答让我很感兴趣。有没有办法只用C++编写整个iOS应用程序,包括UI组件?或者,编写具有GUI组件的iOS应用程序所需的最小Objective-C量是多少? - Kris
4个回答

4
主要优点是可移植性。在采取适当措施的情况下,用C++或C编写的代码块可以非常容易地封装并在iOS、Android或Blackberry等平台上使用。许多第三方库也采用这种方式(例如Zebra Crossing和OpenCV)。
另一个原因(我认为是不好的原因)是开发人员习惯于C或C++,希望尽可能避免学习Objective-C。

4
Objective C是ANSI C的严格超集,因此Objective C程序员很可能已经在C中进行了大量编程。事实上,许多Mac和iOS APIs(音频、图形等)都是C接口和/或使用C数据类型。
在两个语言的超集和子集中执行某些操作的原因之一可能包括性能和可移植性。对于实时音频或视频图像处理等内部循环完全不适合Objective C消息传递中的少量运行时开销。为了可移植性,人们通常可以在iOS、Linux、Android NDKs、WebOS PDKs等中使用良好封装的C代码。有时,某些基础C API的Objective C包装器提供的灵活性并不足够。
我唯一能看到使用C++开发iOS应用的原因可能是使用一些遗留的C++代码,并在可读性、可维护性等方面保持一致的样式。
对于一个iOS应用程序,如果性能或任何可移植的代码重用不重要,则没有理由不使用Objective C(包含C语言),因为这是当前iOS文档、工具、框架和API支持的内容。

2
我能想到的唯一原因是(a)您有一个现有的C++代码库,希望重复使用它(并且不想全部用Objective C重写它),或者(b)您真的喜欢C++和/或真的不喜欢Objective C。

0
为什么不按您的喜好混合使用。编译器支持“Objective C ++”。不确定它是否支持此模式中的C++11功能,但应该很好地支持C++98。我认为唯一需要做的就是将源文件的命名从“.m”更改为“.mm”。(这些都是根据记忆说的,可能不准确)。
至于“为什么”。有些苹果API在一种语言中具有比另一种语言更多的功能。例如,过去它使用的是cocoa接口而不是Objective-C接口,因此一堆图形/QuickTime功能只能通过cocoa接口获得。
更有可能的是,某些第三方库仅可用于一种语言。

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