我听说过Objective-C,但我自己从未使用过它。我很好奇每个人对它的总体看法以及与 C++ 的关系。是否有任何类型的项目会更有用或更没用?
11 回答
像许多其他人一样,由于 iPhone,我刚刚开始关注 Obj-C。我已经做了很多 C++ 和 C#,据我所见,Obj-C 对 OO 有一种基本不同的方法,它向 C 添加了类似 Smalltalk 的消息传递。像 C++ 一样,它基本上仍然是 C 兼容的,但是 OO 扩展让您向任何对象发送任何消息。从这个意义上说,它不像 C++ 和 C# 那样静态类型化,其中对象可以做的事情与它所在的类相关联。在 Obj-C 中,即使对象不支持,您也可以向对象发送消息。如果对象不知道如何处理它,它可以转发它。
真正酷的事情是您可以在运行时添加接口(协议),并且您可以添加自己的处理程序来拦截和隐藏现有类的消息处理程序。
总而言之,在消息处理方面有更大的灵活性,更像是在 Ruby 或 Smalltalk 中所做的。将这种类型的 OO 移植到 C 上是否是一个好主意我还不能确定,在某些方面,C++ 方法与 C 的原始想法更好地结合,但另一方面,Obj-C OO 方法更多OO 纯粹主义者喜欢什么。
From "Some nice features of the Objective-C language":
- Classes are objects
- Dynamic typing and optional static typing
- Categories
- Message sending
- Expressive message syntax
- Introspection
- Dynamic run-time
- Automatic garbage collection
- C inside
- C++ fluent
- Simplicity
- Access to Apple technologies
我发现objective-c 的语法比c++ 更简洁,虽然我知道我在这里是少数
Objective C 的 OO 特性使用动态类型而不是静态(编译时)类型。这是两种语言方法的主要区别——它是否具有优势取决于您对静态与动态类型的看法。
我的观点是,Objective-C 的语法起初有点“奇怪”,特别是如果你来自 C/C++ 背景(就像我一样)。如果您打算为 Mac 或 iPhone 编写应用程序,Cocoa 开发是您的最佳选择。今年春天我有机会在 Mac 上进行了大约一个月的开发,并选择使用 Qt 库在 C++ 中编写它,因为我对这些库非常熟悉,而且时间至关重要。
如果您有 Mac,请试一试!那里有很多信息,并且有一些很好的开发工具。
使 Objective-C 如此出色的部分原因不是语言(尽管这很重要),而是与之配套的 Cocoa(或 CocoaTouch)框架(至少对于 99% 的 objc 用户来说;-)
实际上,在过去的“经典”Mac 时代,我曾经是一名 C++ 程序员。切换到 Objective-C、Cocoa 和 Mac OS X 我发现我变得更有效率。很难说到底有多少生产力,但 50% 到 100% 感觉是对的。
如果你运行的是 Linux,你可以安装 GNUStep,它提供了与 Cocoa 的良好兼容性。这可以让你在没有 Mac 的情况下开始 Objective-C/Cocoa 开发。[在我看来] 学习 Objective-C 的最佳资源来自 Apple。
http://developer.apple.com/referencelibrary/Cocoa/index.html
好吧,如果您正在为某些平台(如 iPhone)编写代码,则需要 Objective-C。Objective-C 还使用动态(运行时)类型,许多人更喜欢静态(编译时)类型。
WebKit 最初是一个 C++ 项目(来自 KDE 的 khtml),后来被 Apple 改编为与 Cocoa 环境更兼容,从而获得了 Objective-C 层。
它比 C++ 更具动态性,并且深受 Smalltalk 的影响。我不觉得它比 C++“更好”——相反,但有些人确实如此。
对于 Mac 和 iPhone 开发来说,绝对是更好的选择。最新版本有 GC,所以如果你喜欢它,你可能会比 C++ 更喜欢它。