Objective-C快还是C++快啊?
理论上,Objective-C和C++没有严格的谁快谁慢,一般来说编译语言比解释语言快,这两个都是编译语言。
实际上,Objective-C的程序有一个性能问题在于消息传递,就是C++或者其他面向对象语言里面叫做调用对象的方法,C++往往写作:
ClassA* a = new ClassA();
a->doSomething();
而,Objective-C写作:
ClassA* a = [[ClassA alloc] init];
[a doSomething];
一般情况下我们也不区分这两种有什么大区别。实际上从核心来看,C++的方法调用是比较简单的,就是一个类指针包含了一个vtable的指针,里面有这些方法的地址。而Objective-C的这个部分叫做消息传递,把一个doSomething的消息传递给对象a,a然后检查自己看看自己能不能响应doSomething这个消息。
这样的一个机制提供了很多灵活性,但是降低了调用的效率。所以,Objective-C在这个层面上效率比较低,消息传递可能比方法调用慢几百倍。但是这在一般程序里面都是非常小的开销,一般情况下是根本忽略不计的。
理论上Objective-C做啥都可以,不过目前主要的库是苹果在维护的Cocoa,这个东西还是比较适合做iOS和Mac开发。GNUStep可以认为是开源的Cocoa克隆,可以跨平台。苹果自己的一些软件,如iTunes的windows版本据说也是用跨平台的内部的Cocoa开发的。