1. Objc是一門編譯型語言,JAVA是解析型語言 編譯型語言:把做好的源程式全部編譯成二進位代碼的可運行程式。然後,可直接運行這個程式。 編譯型語言,執行速度快、效率高;依賴編譯器、跨平臺性差些。 解析型語言:解釋性語言在運行程式的時候才翻譯,每個語句都是執行的時候才翻譯。這樣解釋性語言每執行一 ...
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實現多繼承。