使用Objective-C相比C++有哪些优势?

23

我听说过Objective-C,但自己从未使用过。我很好奇大家对它的看法,无论是一般性的还是与C ++相关的。它在哪些类型的项目中会更有用或不太有用?

11个回答

20

像许多人一样,因为 iPhone 的缘故,我刚开始学习 Obj-C。我已经做了很多 C++ 和 C#,从我所看到的来看,Obj-C 在面向对象方面有一个基本不同的方法,它将 Smalltalk- 类似的消息传递添加到 C 中。与 C++ 一样,它基本上仍然与 C 兼容,但是 OO 扩展允许您向任何对象发送任何消息。在这个意义上,它不像 C++ 和 C# 那样是静态类型化的,其中对象可以执行的操作与其所属的类相关联。在 Obj-C 中,即使对象不支持它,您也可以向对象发送消息。如果对象不知道如何处理该消息,则可以转发该消息。

真正酷的事情是,您可以在运行时添加接口(协议),并且您可以添加自己的处理程序,以截取和隐藏现有类的消息处理程序。

总的来说,在消息处理方面有更多的灵活性,更像 Ruby 或 Smalltalk 中要做的事情。至于在 C 上搭载这种类型的 OO 是否是个好主意,我还无法确定,在某些方面,C++ 的方法更符合 C 的原始思想,但另一方面,Obj-C OO 方法更符合 OO 纯粹主义者的思路。


16

来自"Objective-C语言的一些不错的特性"

  • 类是对象
  • 动态类型和可选静态类型
  • 分类
  • 消息发送
  • 表达式消息语法
  • 内省
  • 动态运行时
  • 自动垃圾回收
  • C内部
  • C++流畅
  • 简单性
  • 访问苹果技术

13
我发现 Objective-C 的语法比 C++ 更加简洁,尽管我知道这在这里是少数派观点。

3
是的,我会说它更加干净了,不仅仅是一点点。就像,现在它可以被解析了。 - Stephan Eggermont

6

Objective C的面向对象特性使用动态类型而不是静态(编译时)类型。这是两种语言方法的主要区别 - 它是否是优势取决于您对静态与动态类型的看法。


5
我的观点是,Objective-C的语法一开始可能会有些“奇怪”,特别是如果你来自C/C++背景(就像我一样)。如果你计划编写Mac或iPhone应用程序,那么Cocoa开发是最好的选择。今年春天,我有机会在Mac上进行了大约一个月的开发,并选择使用Qt库以C++编写,因为我对这些库非常熟悉,时间也很紧迫。
如果你有一台Mac,可以试试!有很多关于它的信息,并且有一些很好的开发工具。

1
除了这些出色的答案,我想指出如果你感觉更舒适的话,也可以使用Objective-C++开始编程。 - Jon Gretar

5
Objective-C的吸引力之一不仅在于该语言本身(虽然这是其中一个重要因素),还在于伴随着它的Cocoa(或CocoaTouch)框架(至少对99%的objc用户来说是这样)。
实际上,我曾经是一名C++程序员,在老款“Classic”Mac时代工作。转换到Objective-C、Cocoa和Mac OS X后,我发现自己变得更加高效。很难精确地说明提高了多少效率,但50%到100%的效率提高感觉是正确的。

4

3

如果您正在为 iPhone 等平台编码,则需要使用 Objective-C。Objective-C 还使用动态(运行时)类型,许多人喜欢它胜过静态(编译时)类型。


2

WebKit最初是一个C++项目(来自KDE的khtml),后来由苹果公司进行了改进,使其更兼容Cocoa环境,并增加了Objective-C层。


2

对于Mac和iPhone开发来说,它绝对更好。最新版本具有GC功能,因此如果您喜欢这个功能,那么您可能会比C++更喜欢它。


方法调用的松散绑定和独立接口使得代码非常稳定,而在单独的区域(内存地址空间)中运行对象使得应用程序非常稳定,因为它基本上是C语言。 - Tim Williscroft
1
最新版本有垃圾回收机制,如果你喜欢这个特性,那么你可能会比喜欢 C++。请注意,这是一个毫无意义的争论,垃圾回收并不一定是 C++ 开发人员的首选。 :-p ... - paercebal
我同意 - 这就是为什么我说:“如果你喜欢的话”。 - Lou Franco
此外,仅 Mac OS X 10.5 拥有垃圾回收功能。iPhone 上还没有垃圾回收功能,我们仍在等待! - schwa
在OSX中,GC已经被ARC(自动引用计数)所取代。我不认为它会出现在iOS上。 - Ferruccio

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