Objective-C在Cocoa开发中的动态优势?

时间:2010-10-11 00:27:53

标签: objective-c cocoa

因此,根据我的理解(其中一个),Obj-C的最大诱惑是动态的消息传递运行时。

这个和其他功能对Cocoa开发有何益处?为什么Obj-C用于Cocoa dev而不是C ++ / C?

基本上我正在尝试理解这些语言功能在实际解决OSX或iOS应用程序方面的特定问题时实际上是如何有益的。

4 个答案:

答案 0 :(得分:7)

在动态性较差的语言中,Cocoa框架的主要部分很难(当然不是不可能)。在编译时绑定(方法调用)语言中,键值编码(使用动态调度和运行时类以及层次结构修改)很难做到。 Core Data的属性getter / setter的合成是Objective-C的动态消息传递(和动态运行时)的类似示例,使事情变得更加容易。

Objective-C的动态消息传递专门设计为 来解决大型项目中的依赖性问题。而像C ++这样的编译时绑定语言需要将依赖模块重新编译在一起,而Objective-C的运行时绑定消息传递意味着您总是必须重新编译所有内容。在NeXT决定使用Objective-C(当时是不成熟的C ++)时,这是开发人员理智的一个主要因素。它仍然使大型系统更易于管理(尽管如此,在C ++或Java或者......中,这肯定不是不可能的,只是更难)。

答案 1 :(得分:0)

我的两分钱:

  1. 单一继承:减少类的耦合,有些(包括我自己)认为它是一个障碍。
  2. 有协议:C ++没有。
  3. 消息系统:它不是一个优势,但它与C ++中的点语法不同。
  4. C:C ++的严格超级集合主要是C的超级集合。
  5. 您可以使用Objective-C ++,它使用Objective-C为您提供C ++的强大功能。

答案 2 :(得分:0)

我一直在广泛使用C ++和Objective-C ++。我的看法是消息传递系统解决了很多问题。在Objective-C中,C ++中的许多设计模式/黑客都是微不足道的。

一个问题是消息传递系统(如果我错了就纠正我)是不安全的,因为消息是作为文本传递的。反向设计一个Objective-c程序似乎也容易得多。

答案 3 :(得分:-3)

你的问题的答案不是技术问题,而是历史问题。

史蒂夫·乔布斯离开苹果公司并在Objective C基础上创建了NExT,这是一种新的改进的面向对象的动态类型语言 - 对C的巨大改进,然后返回Apple和Apple购买NExT并使用它的核心设计MAC OS X. MAC OS因此,在Objective-C中构建了X和iOS框架。

现在技术细节是另一回事。

动态类型例如带来了编程潜力的彩虹,但是从编译时到运行时需要大量的调试工作,即由于语言是灵活的,所以你可以放弃运行不一定简洁的应用程序和/或连贯的。

另一方面,Java解决了寻找Objective-C的所有问题,并为您提供了一种内省的非动态语言 - 让您拥有动态类型的所有强大功能,并保留一套严格的规则,从而使您免受98%的影响你的调试时间。

C和C ++是过去的不良语言 Objective-C是一种很好的语言 Java / C#是现代语言

来自广泛的Java / C#编程,并且不得不再次与更糟糕的编译器一起处理ObjC,这是一个下降到地狱,但是,嘿,这是我想要为iPhone开发的惩罚。