1. Objc是一门编译型语言,JAVA是解析型语言
编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。 编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。
解析型语言:解释性语言在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好。
Objc是动态语言,就是在运行时可以改变代码结构,Java则是静态语言。Objc中的KVC与KVO充分说明了这个特点。
2. 内存管理与消息传递方面:
Objc是引用计数,发生在编译期。Java是垃圾回收,发生在运行时。后来Objc出现了ARC,不用程序员去写管理内存的东西,但其本质是编译期基于引用计数的内存管理。
最大的区别在于Objc是使用消息传递的,本质是字符串,所以其在运行时可以修改类、对象、方法。Java的方法是与class静态绑定的,虽然在运行时通过反射来获取,但是性能会下降一个数量级。所以说Objc更加动态。
所以android手机为什么体验有点差,因为Java的垃圾回收机制。
3. 代码方面:
1)Java有命名空间package,Ojbc没有。
2)实现多继承的方法不同,java通过不可以继承多个父类,可以通过实现多个interface接口的方式来实现多继承。Objc通过Categories和Protocols实现多继承。