2010-08-03 58 views

回答

7

2.0與1.0不是一個非常有用的區別,因爲線條相當模糊。 Dreamlax的答案是正確的,但只適用於語法(即使如此,也有一些漏洞)。

特別是,有語言的語法來考慮也有ABI;實際的二進制格式要考慮。還有一些功能只能在LLVM中使用。

好消息,雖然和dreamlax說的一樣,但是你通常真的不關心2.0和1.0,不管是從語法上還是從ABI的角度來看。從句法的角度來看,使用你想要的功能並用它來完成。從ABI的角度來看,1.0與2.0在學術上很有趣,但對你的代碼來說是不可見的。大多數細節通常只會成爲框架和大型應用程序作者的問題。大多。

在任何情況下,並把我的頭頂部:

  1. 垃圾收集僅在Mac OS X提供平臺(i386和x86_64)。

  2. @property是一個語法Objective-C 2.0功能,適用於所有平臺和編譯器。

  3. 是一個擴展C,與目標C兼容,並且,由於iOS 4的,可以在所有平臺和編譯器。

  4. C++LLVM 2.0只支持一個尚未發佈的編譯器,但可以從http://llvm.org/

  5. @synthesize實例變量的只適用於Objective-C 2.0 ABI(非脆弱iVars,就是它基於的)。

  6. @property的自動合成隱含的ivars在LLVM 2.0中,目前作爲實驗性功能。

  7. poseAsClass:在i386中被棄用並且完全在x86_64中被移除& iOS(即在Objective-C 2中不存在。0 ABI)

  8. Objective-C 1.0 ABI暴露類內部結構。 Objective-C 2.0提供了用於獲取和編輯幾乎所有內臟的API(請在任何缺失的文件上提供文件錯誤),從而允許內部將來改變。

  9. 儘管x86_64和ARM之間的實現細節差別很大,但「零成本異常」和「Unified C++/Objective-C異常」都只在Objective-C 2.0 ABI中。

我確定我錯過了一些東西。

2

許多Objective-C程序員在學習版本2之前學會了第一版。你不會浪費時間學習那本書,但是一旦你完成了它並且適應版本1,那麼你可以移動開始學習版本2.如果您必須定位到較舊的Mac OS X系統,瞭解兩個版本之間的差異非常重要。

Objective-C 1.0代碼仍然是有效的Objective-C 2.0代碼。我遇到了一些甚至比Objective-C 2.0更喜歡Objective-C 1.0的程序員。

+0

太棒了!正是我希望在這裏! :) 是的,我也聽說iPhone不支持所有的2.0功能,而且,至少暫時是我學習Obj-C的主要原因,無論如何都使它更加合適。 – Qcom 2010-08-03 11:02:52

+0

iPhone支持幾乎所有2.0 API和ABI功能保存垃圾回收。 – bbum 2010-08-03 15:49:34