Objective-C ++语言:我在哪里可以找到有关它的更多信息?

时间:2010-01-22 12:39:23

标签: iphone programming-languages macos objective-c++

我已经学习了几个月的C ++,并且发现它是一种很好的语言,尽管它很有特权。

我想知道究竟什么是所谓的 Objective-C ++ ,如果值得学习它作为主要开发语言来定位Apple环境(即Mac OS X,iPhone OS)。在网上搜索我只发现了几篇好文章:主要是Wikipedia's entry,还有一篇来自Mac Dev Center

维基百科说:

  

Objective-C ++是GNU编译器集合的前端,它可以编译使用C ++和Objective-C语法组合的源文件。 Objective-C ++为C ++增加了Objective-C添加到C的扩展。

Mac Dev Center文章补充道:

  

Apple的Objective-C编译器允许您在同一源文件中自由混合C ++和Objective-C代码。这种Objective-C / C ++语言混合称为Objective-C ++。有了它,您可以使用Objective-C应用程序中的现有C ++库。

Apple文章将Objective-C ++称为一种语言。这是对的吗?

我想知道以下内容:

  • 是否可以在不知道C / Objective-C的情况下学习和使用Objective-C ++?
  • 有没有可以获得更多信息和/或帮助的好书,网站,论坛等?
  • 据您所知,在Objective-C ++中是否有大型项目?

5 个答案:

答案 0 :(得分:8)

Objective-C ++实际上只是将Objective-C与C ++混合在一起。因为它允许来自两者的语法,所以你可以说它是一种新语言。

当我必须将Objective-C代码与某些C ++库接口时,我主要使用ObjC ++(。mm源文件)。在这种情况下,能够调用C ++很方便。我个人并不认识很多真正混合C ++和Objective-C的人。

答案 1 :(得分:5)

是的,当你想要开发具有竞争力的通用力量(也就是人们愿意支付它们的那么好)Apple应用程序时,你应该学习Objective-C ++。

在同一个文件中,Objective-C和C ++实际上并没有其他内容。

对于Objective-C,使用流行的苹果开发博客/邮件列表/新闻组中的任何一个。特别是Apple直接提供的那个。

对于C ++,这是相同的,有数十个博客/邮件列表/入门教程。但是,如果你已经理解了编程,那么C及其Objective-C附加组件非常简单易学。 C ++是一个完全不同的复杂野兽。获取一些好书并学习它(10年后你将能够完全理解语言:-)但你可以用这方面的一小部分编写C ++程序。

所以现在是一个神奇的问题,为什么你应该使用C ++,当你可以逃避Objective-C。答案很简单。除了明显提到的现有C ++库的包装之外,Objective-C首先是缓慢的 - 方法调用。通常的做法是在你的方法中做一些严肃的事情,以避免出现在这种语言中的运行时间。

但特别是对于容器,您应该考虑使用C ++模板。矢量比NSArray快得多。如果您的数据集很大,您会感受到不同。此外,我发现C ++容器更容易使用,因为它们避免了与Objective-C有关的类型转换。

在iPad和iPhone上使用缓慢的ARM CPU,这不是过早的优化。

不幸的是,您不能混合使用C ++和Cocoa类,因此C ++只应用于算法数据。对于GUI,您必须使用Cocoa和Objective-C类。

在C ++和Objective-C之间取得适当的平衡是您作为Apple程序员开发所需技能的一部分。

答案 2 :(得分:1)

1)我对此表示怀疑,因为他们每个人都是C语言的超集。 我不认为objective-c ++是一种全新的语言。它只是两者的混合,为您提供了一些额外的可能性 - 即重用现有的c ++代码,或在更多时间关键代码部分使用更快的c ++,或使用c ++代码,其中没有暴露Objective-c / cocoa接口(主要是硬件相关的低级别)像串口/ ioctls,opengl,......)

2)我认为关于这个主题的资源是

3)通过...我的意思是你认为什么是大的。我只是从一堆项目中知道(也许并非所有项目都是商业上可以购买的商品),因为1中列出的原因使用了这种混合物。

答案 3 :(得分:0)

许多大型项目都使用了一些Objective-C ++。例如,Camino,Chromium和Firefox都是包含Objective-C ++的实质性开源项目。

答案 4 :(得分:0)

<强>目的-C ++

Objective-C是ANSI C的一小组扩展。 Objective-C++是应用于C ++的同一组扩展。 Apple的Objective-C编译器也是Objective-C ++编译器。

Objective-C的一个优点是,作为ANSI C的超级集合,它可以轻松地与世界上数百万行现有C代码混合使用。 Objective-C ++可以与已经存在的数百万行C ++代码混合使用。 Objective-C ++完全支持C ++等功能,例如名称修改,以便Objective-C ++代码和现有的C ++代码是可能的。

Objective-C源代码文件由.m扩展名标识。 Apple的编译器将.M或.mm扩展名的文件视为Objective-C ++源代码。此外,-x编译器选项可用于指示Apple的编译器将任何输入文件视为Objective-C ++源代码。

Apple的在线文档描述了<{3}}中Objective-C ++的功能和局限性,以及Apple开发人员工具附带的发行说明。通常,Objective-C类和C ++类可以混合,以便Objective-C方法可以调用C ++成员函数,反之亦然,或者C ++类可以包含指向Objective-C对象的指针作为成员变量。 Objective-C类不能从C ++类继承,反之亦然。两个类层次结构必须保持不同。关于实例创建和删除的语义在C ++和Objective-C之间有很大的不同。因此,混合它们可能很棘手,但在新的Objective-C项目中重用现有C ++代码的好处超过了它引入的复杂性。

关于Objective-C ++的一些更实际的观点

Gcc现在是C,Objective-C和C ++的编译器。您可以在某种程度上混合使用C ++和Objective-C代码。要指示编译器文件包含C ++代码以及Objective-C,请使用文件扩展名.mm或.M而不是.m。

以下是C ++和Objective-C代码可以一起使用的一些方法:

  1. Objective-C对象可以包含指向C ++对象的字段,反之亦然。

  2. Objective-C代码可以在C ++对象上调用方法,反之亦然。

  3. Objective-C对象可以将C ++对象(而不是指针)作为字段,但前提是C ++类没有虚拟方法。

  4. 但是,Objective-C和C ++并不完全兼容。以下是一些你不能做的事情:

    1. Objective-C类不能从C ++类继承,反之亦然。

    2. 您不能在C ++名称空间或模板中声明Objective-C类,反之亦然。

    3. 您无法将C++个关键字用于Objective-C变量名称。

    4. 您无法使用Objective-C语法调用C++方法,反之亦然。

    5. 最后,为避免歧义而施加了一些限制:

      1. 您不能将名称ID用作C ++模板名称。如果可以的话,声明id&lt; TypeName&gt; var可以是C ++模板声明,也可以是使用协议的Objective-C声明。

      2. 如果要将全局范围的C ++变量传递给Objective-C方法,则需要在第一个和第二个冒号之间留一个空格。

      3. 您可能会发现这些链接很有用: -

        1. http://developer.apple.com/techpubs/

        2. https://www.raywenderlich.com/62989/introduction-c-ios-developers-part-1

        3. https://www.raywenderlich.com/62990/introduction-c-ios-developers-part-2

        4. https://www.sitepoint.com/using-c-and-c-in-an-ios-app-with-objective-c/