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

作者&投稿:宓省 (若有异议请与网页底部的电邮联系)
Objective-C 和 C++ 的区别有哪些?为什么苹果会选择前者~

  Objective C基本上是在C + Smalltalk基础上衍生出来的,C++就是C++。除了都是从C语言分化出来的以外,完全没有任何共性。

最大的区别就是Objective C的成员函数调用是基于动态绑定的,类本身并没有限制对象可以有什么函数。相对于C++类会规定好成员有什么函数。这使得Objective C的灵活性很大,但是执行效率也很低。

在NeXT系统的时代C++和Objective C都不是那么大众的东西,C++也还没完善,而且那个时代编译器的有优化能力也没现在那么变态。所以选择Objective C也不是很奇怪的事。但是现在Objective C的劣势就越来越明显了,所以苹果开发了Swift,而且就内部消息苹果很可能会准备放弃OC。

Objective C基本上是在C + Smalltalk基础上衍生出来的,C++就是C++。除了都是从C语言分化出来的以外,完全没有任何共性。

最大的区别就是Objective C的成员函数调用是基于动态绑定的,类本身并没有限制对象可以有什么函数。相对于C++类会规定好成员有什么函数。这使得Objective C的灵活性很大,但是执行效率也很低。

在NeXT系统的时代C++和Objective C都不是那么大众的东西,C++也还没完善,而且那个时代编译器的有优化能力也没现在那么变态。所以选择Objective C也不是很奇怪的事。但是现在Objective C的劣势就越来越明显了,所以苹果开发了Swift,而且就内部消息苹果很可能会准备放弃OC。

Objective C基本上是在C + Smalltalk基础上衍生出来的,C++就是C++。除了都是从C语言分化出来的以外,完全没有任何共性。

最大的区别就是Objective C的成员函数调用是基于动态绑定的,类本身并没有限制对象可以有什么函数。相对于C++类会规定好成员有什么函数。这使得Objective C的灵活性很大,但是执行效率也很低。

在NeXT系统的时代C++和Objective C都不是那么大众的东西,C++也还没完善,而且那个时代编译器的有优化能力也没现在那么变态。所以选择Objective C也不是很奇怪的事。但是现在Objective C的劣势就越来越明显了,所以苹果开发了Swift,而且就内部消息苹果很可能会准备放弃OC。

1、两者最大的相同便是: 都是从 C 演化而来的面向对象语言, 两者都兼容标准 C 语言.

2、两者最大的不同便是: Objective C 提供了运行期动态绑定机制, 而C++ 是编译时静态绑定, 并通过嵌入类(多重继承)和虚函数(虚表)来模拟实现. Objective C 在语言层次上支持动态消息转发, 其函数调用语法为 [object function], 而且C++ 为 object->function(). 两者的语义也有不同,
在 Objective C 里是说发送消息到一个对象上, 至于这个对象能不能处理消息(也就是说实现了这个函数与否)以及是处理还是转发消息都不会 crash, 而在 C++ 里是说对象进行了某个操作,如果对象没有这个操作的话,要么编译会报错(静态绑定),要么程序会 crash 掉的(动态绑定).

3、Objective C 不支持多重继承, 而 C++ 支持. 不过 Objective C 通过 proxy(代理) 和 Category(类别) 可以更优雅地实现这一特性. 这一点也包括了 overwriting(覆盖) 和 overloading(重载) 两者的不同.

4、函数名字解析也不同, Objective C 的函数名字解析是函数名称 + 参数名称的, 而 C++ 只包括函数名称. 因此在 Objective C 中以下是合法的,因为两者解析出来分别类似于 foo:bar1 和 foo:bar2, 是不同的;

5、Objective-C 没有 C++ 里有的构造函数和析构函数, 其对应物为 alloc-init/free .

6、Objective-C 2.0 了加入了垃圾回收机制(在 iPhone 和 iPad 上不可用), 而 C++ 没有.

7、Objective-C 不允许在 Stack 上分配内存, 只能在 heap 上进行, 而 C++ 两者都允许.

8、Objective-C 不支持引用, 而 C++ 支持.

9、Objective-C 不支持模板, 而 C++ 支持.

10、Objective-C 是 Smalltalk 系的, 而 C++ 是 Simula 系的.

可以这么说 Objective-C 在 C 之上进行了一层简单的包装, 而 C++ 在 C++ 之上进行了复杂的包装, 但 Objective-C 让人感觉更优雅简洁,objective-c与C的差距相对小,而C++与C的差距有些大,添加了更多的内容。

苹果选择它的原因:mac是一个 mach 微内核 + BSD 发展而来的 UNIX 基础系统,用c-objective在使用方面显得更简洁优雅。

引用:http://mobile.51cto.com/iphone-281118.htm


objective什么意思
objective的意思是:目的。一、解释 adj.客观的;宾格的;客观存在的;真实的;n.目的;目标;宾格;物镜。二、例句 1、Art was being demarcated from the more objective science.艺术正在被从更加客观的科学中区分出来;We now had a clear-cut objective.我们现在有了明确的目标。2、The system ha...

objective是什么意思
意思如下:1、名词 目标;目的。【光学】(望远镜、显微镜、照相机及其他光学仪器上的)物镜。【语法】宾语;宾格;宾格词。2、adj 客观的;就事论事的。【哲】客观存在的;某于事实的。【语法】宾格。相关词性分析 object强调个人或需求而决定的目标、目的。objective与object基本同义,但语义更广泛,指...

objective怎么读
objective的读音是:英音[əbˈdʒektɪv]、美音[əbˈdʒɛktɪv]。1、objective基本解释 adj.客观的,实体的;目标的;[语]宾格的;[医]他觉的 n.目标,任务;[光]物镜;[语]宾语,宾格;[事]出击目标 2、objective用法和例句 Whileholding...

objective是什么意思啊?
objective 英 [əbˈdʒektɪv]n.目的;目标;宗旨;出击目标;军事目标;宾格词;(光学仪器的)物镜;(照相机或投影仪成像的)镜头;adj.客观的;不带个人感情的;无偏见的;客观存在的;现实的;客观的;不受个人认知影响的;(症状)客观的,他觉的;宾格的;目标的;目的的;[...

objective怎么读
objective 英[əbˈdʒektɪv] 美[əbˈdʒektɪv]objective,英文单词,主要用作名词、形容词,作名词时意为“目的;目标;(军事行动的)攻击目标;物镜;宾格”,作形容词时意为“客观的;客观存在的;(疾病症状)客观的,他觉的;目标的;宾...

objective是什么意思
objective英 [bdektv] 美 [bdktv]adj.目标的;客观的,实体的;[语]宾格的;[医]他觉的 n.目标,任务;[光]物镜;[语]宾语,宾格;[事]出击目标双语例句 词语搭配:achieveanobjective实现目标;importantobjective重要目标 mainobjective主要目标;primaryobjective首要目标 例句:1、Ourmainobjectivewasthe...

objective和goal的区别是什么?
objective和goal的区别:一、指代不同 1、objective:目标,目的。2、goal:球门,射门。二、用法不同 1、objective:objective用作形容词的意思是“客观的,不带偏见的”,指以纯客观的眼光去观察事物或现象,不掺杂个人的情感与偏见。2、goal:goal的基本意思是“球门,进球得的分”,引申为“目标”,...

objectives是什么意思
意思:n. 目标;宗旨 读音:英[əbd'ʒektɪvz]、美[əbd'ʒektɪvz]例句:The two objectives are in conflict.两个目标发生了冲突。原型:objective 读音:英[əb'dʒektɪv]、美[əb'dʒektɪv]例句:Her principal ...

objective,object是什么意思?
1、objective用作形容词的意思是“客观的,不带偏见的”,指以纯客观的眼光去观察事物或现象,不掺杂个人的情感与偏见。2、object的基本意思是“物体”,指可见到或可触摸到的实物。object也可作“对象”“客体”解,指行为、感觉或思想所及的人或事物,常与介词of搭配使用。object还可作“目标,意向,目的...

object和objective有什么区别,怎么用?
二、objective的详细释义 n. 目标;目的;【光学】(望远镜、显微镜、照相机及其他光学仪器上的)物镜;【语法】宾语;宾格;宾格词 adj.客观的;就事论事的;【哲】客观存在的;某于事实的;【语法】宾格词形变化 三、知识点拓展:其他表示目标的单词:1、aim从本义“靶子”引申而来,侧重比较具体而明确的目标...

赤壁市13650518957: ObjectC和C++的区别 -
亓要佑苏: 通常写作objective-c或者obj-c object-c语言是根据C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言 它主要使用于MAC OS X和GNUstep这两个使用OpenStep标准的系统.在MAC OSX系统下,运用苹果提供的SDK等...

赤壁市13650518957: Object C和C++有什么区别 -
亓要佑苏: 单一继承:Objective-C不支持多重继承,(同Java和Smalltalk),而C++语言支持多重继承.动态:Objective-C是动态定型(dynamicaly typed)所以它的类库比C++要容易操作.Objective-C 在运行时可以允许根据字符串名字来访问方法和类,...

赤壁市13650518957: 【C语言】Objective - C 和 C++ 的区别有哪些? -
亓要佑苏: 这东西跟c++有什么本质区别?为什么苹果会选择obj-c而不是c++? 答:Objective-C是C的扩展,设计思路上借鉴了Smalltalk的面向对象和消息机制的思想.从我个人使用过的面向对象语言来看Objc 是对消息传递支持的最彻底也最显式的....

赤壁市13650518957: object c和c++的区别 -
亓要佑苏: 两者都是C语言的衍生,但C++完全不支持Objectice C,Objectice C仅仅支持部分C++特性(比如mm文件直接定义及实现类、函数指针等). Objective C在效率上比C++差一些(因为支持类反射,这样一来会有差距,而C++在这方面做得比较好...

赤壁市13650518957: Objective - C 和 C++ 的区别有哪些?为什么苹果会选择前者 -
亓要佑苏: 他俩都是面相对象的, 语言只是工具, 思想都是一样的,只是用法不同.如果习惯了C++的人, 初次去看Objective-C会觉得有点看不懂.因为他们的语法差别比较大.我就是做C++的, 后来电脑换成了Mac, 业余时间会看看ios的代码,学习一下.个人感觉, 如果懂C++的话, 看Objective-C会比较快一点,因为都是面相对象的.当然, 二者在功能上还是有区别的, 不过对于初学者来说用不着关注太多.苹果之所以选择前者,是有历史原因的.那时候乔布斯被自己的公司开除了,出去开了一家小公司, 他们为了快速开发就把C封装了一下,成了现在的Objective-C. 后来乔布斯重返苹果, 就带着这个OC回来了.

赤壁市13650518957: Objective C 和 C++的区别
亓要佑苏: 和c++也是有c语言派生出来的一种语言,并且和c++一样主要改进就是加入了面向对象的机制,只是实现的方式和思路和c++不同.主要用来开发mac os以及ios下的应用.

赤壁市13650518957: object - c的和C++的比较 -
亓要佑苏: 目前好象只有Apple使用Objective-C作为其支持的语言吧. 与C++的不同之处有: O-C中所有的类都必须继承自NSObject. O-C中所有对象都是指针的形式. O-C用self代替this. O-C使用id代替void*. O-C使用nil表示NULL O-C只支持单继承. ...

赤壁市13650518957: Objective - c相比Java有哪些优点? -
亓要佑苏: 本来从语言特性来说,Objective-C和Java比不合适,因为设计理念不同,Objective-C和C++可以比,Java和C#比.Java和C#编译出的代码都需要一个运行环境才能跑,类似虚拟机的方式执行代码,Objective-C和C++编译出的代码则可以直接给...

赤壁市13650518957: object - c的优点及缺点 -
亓要佑苏: Objective-C是非常“实际”的语言.它使用一个用C写成、很小的运行库,只会令应用程序的大小增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反,ObjC写成的程序通常不会比其原始码大很多.而其库函数(通...

赤壁市13650518957: C++ Objective - C C 这三种语言各有什么优缺点
亓要佑苏: C++有一种说法是C的扩展.C++支持面向对象,而C是面向过程的语言. C语言写的代码是可以直接被C++程序调用的,在C++的开发环境下是可以写纯C语言的. 要说各自的优缺点如果只在这两种语言中来说的话C++要比C高级,功能更强大.但是底层传输开发或者硬件开发还是C语言. Objective-C是也是C的面向对象扩展,主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言.个人对此语言没有应用经验,感觉苹果和next电脑是使用这种语言开发的,应用范围较小.具体和 C++区别不敢妄言.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网