为什么苹果会把Objective-C作为Mac的官方开发语言?
在Mac OS X上,用Objective-C写的程序运行效率会更高吗?
苹果选Objective-C做开发语言是有很长历史的,回头我整理下详细聊,这个事情可以追溯到很久以前,而且对苹果的发展也有很大的好处。Cocoa库的历史也很悠久。
至于效率其实都差不多,没有说Objective-C在Mac上面格外高,只是除了GNUStep以外,目前也基本上只有Mac/iOS在用Objective-C。
Obj-C和C++语言都只是在C上面的面向对象封装而已,都是通过转换为C再编译成机器码的,所以没有本质上的性能优势。当然,要说和编译成中间代码的Java以及其他脚本语言来比较,当然运行效率更高啦。 Mac/iOS的核心不是还是用C写的嘛,你看Core的部分很多函数都是C函数来的,所以理论上说Obj-C只是让你写代码写起来比较方便而已。
Tinyfool之前不也说过Obj-C和C++的性能比较吗?http://tiny4cocoa.com/thread/show/124/
Obj-C相对C++有更好的“动态特性”,就是通过消息机制实现的,但这必然多少会有一定性能影响。
其次,所有采用垃圾回收机制的语言内存消耗量都会比手工管理内存的消耗量大很多,这也一定程度上影响性能和效率。所以采用Java这类语言作为某一操作系统的核心开发语言,其实是很不明智的。
而对于面向应用的上层语言,如果是直接能访问操作系统底层语言接口的是最高效的,所以C++和Obj-C很明显就是最高效的方式。而另外一种例子就是Android中的Java,但其实那个和普通的Java基本上就不是一种相同的语言,只是利用了原来Java的语法和关键特征,关键是可以比较直接得访问操作系统核心语言的接口(JNI),所以才能相对比较高效。反面例子就是BB OS了(直接采用标准的JVM和Java基础库),用过的人都知道黑莓系统有多慢(虽然我还曾算是半个黑莓粉也不能否定这样的现实)。
@nickel,C++仅在最早期会先变成C语言代码,然后编译,现代的C++编译器都是直接编译的。Objective-C是C语言的超集,而且实现方式是在Runtime进行扩展,所以,Objective-C可以说就是按照C语言来编译,但是从现在的编译器来看编译Objective-C和C语言用的也不是一样的部件,特定是苹果用了Clang/LLVM以后。因为按照Objective-C的逻辑来编译的话,优化和错误提示都可以更加友好。