Objective-C 和 C++ 的区别都有哪些?为啥苹果会选择前者

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objective-C 和 C++ 的区别都有哪些?为啥苹果会选择前者相关的知识,希望对你有一定的参考价值。

Objective-C 起源于 Smalltalk 系的, 而 C++ 是 Simula 系的。而苹果选择这个主要是去掉c++复杂的特性,增强动态性congestion适合苹果的需求:

1、两者最大的不同便是: Objective C 提供了运行期动态绑定机制, 而 C++ 是编译时静态绑定, 并通过嵌入类(多重继承)和虚函数(虚表)来模拟实现. Objective C 在语言层次上支持动态消息转发, 其函数调用语法为 [object function], 而且C++ 为 object->function().
2、Objective C 不支持多重继承, 而 C++ 支持. 不过 Objective C 通过 proxy(代理) 和 Category(类别) 可以更优雅地实现这一特性. 这一点也包括了 overwriting(覆盖) 和 overloading(重载) 两者的不同。
同时苹果优化了 proxy(代理) 和 Category(类别)使得系统更加灵活。
参考技术A Objective-C简称OC,自己用过,并且现在还在使用,好处呢,是学和理解起来简单。开发效率比C语言高很多。只是在C语言的基础上增加了一层面向对象。把原C函数做了一层封装。
C++,为了保持对以前的兼容性,代价就是语言复杂度稍高。一般程序员都望而却步。而且真正学好C++的人也不多。有很多人只知道C++,STL都不清楚是什么,更别说Primier和Boost了。
苹果选择OC,应该是看重这门语言的简介和效率并重了吧。
希望对你有帮助。

Objective-C 和 Cocoa 有啥区别?

【中文标题】Objective-C 和 Cocoa 有啥区别?【英文标题】:What's the difference between Objective-C and Cocoa?Objective-C 和 Cocoa 有什么区别? 【发布时间】:2009-01-12 16:16:05 【问题描述】:

我只是在为 Mac 学习 Objective-C/Cocoa 编程。我一直在使用的所有教程、书籍、博客、播客等都将两者结合在一起。有没有一种简单的方法可以区分哪些部分是普通的 Objective-C,哪些来自 Cocoa?

【问题讨论】:

【参考方案1】:

Objective-C 是一门语言……它定义了所有东西,比如定义对象的关键字、消息传递对象的语法等等。

Cocoa 是一个开发框架(它实际上是一个综合框架,结合了其他三个框架,Foundation、AppKit 和 CoreData)。

这些框架 (Cocoa) 定义了所有易于使用并与操作系统交互的对象,以及许多功能。例如,Cocoa 定义了 NSStringNSObject 之类的东西。 Cocoa 目前可以与其他语言绑定一起使用,例如 python 或 ruby​​,过去也可以与 Java 一起使用。因此,如果您将 Cocoa 与 Java 一起使用,您仍然会得到一个 NSString 对象,但您会在 Java 应用程序中调用和使用它。

没有链接到 Cocoa 框架之一,Objective-C 仅带有一个非常基本的 Object 类作为预定义的根类。

【讨论】:

谢谢!我对 Foundation、NSString 和 NSObject 之类的东西特别好奇【参考方案2】:

Objective-C 就是语言本身。

Cocoa(以前称为 NextStep)是位于 Obj-C 之上的 API 和运行时。任何以 NS(用于 NextStep)开头的东西都是 Cocoa 的一部分,而不是语言的一部分。

【讨论】:

【参考方案3】:

当然,这很容易 - Objective-C 是语言,Cocoa 是您用来构建 Mac 应用程序的 API/库。

【讨论】:

【参考方案4】:

查看 /usr/include/objc/ — 里面有纯 Objective-C。其他一切都是可可。您可能会注意到您几乎从不直接使用其中的任何东西。

但是,在实践中它几乎没有什么区别。 Cocoa 是事实上的 Objective-C 标准库。在没有 Cocoa 的情况下使用 Objective-C 的唯一平台是 Portable Object Compiler,我猜可能还有三个人在使用它。

【讨论】:

我想现在只有两个人了...那个拿着绿色咖啡杯的家伙最近专门转用 C#... 相关讨论冗长,挺有意思的:Why is Objective-C not widely used beyond Cocoa environments?

以上是关于Objective-C 和 C++ 的区别都有哪些?为啥苹果会选择前者的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 和 C++ 的区别有哪些?

objective-c与C++的区别

objective-c与C++的区别

C和C++语言都有哪些主流开发工具?

java中vector与C++中vector用法都有哪些区别?

objective-c和c++的区别