2012-09-20 53 views
15

這個問題在這裏經常出現,即使只是隱含在用戶誤認他們的iOS問題時。那麼,Xcode,Objective-C和Cocoa有什麼區別呢?Xcode,Objective-C和Cocoa有什麼區別?

+31

這是一支鋼筆,英語,公共圖書館之間的區別。 –

+2

@Catfish_Man這真的很有幫助的人,而不是...專門爲任何人開始潛入iOS開發 – Leo

回答

32

Objective-C是一種編程語言。可以這麼說,它只是描述了什麼有效的Objective-C程序是什麼樣的,它們是什麼意思。如果你有一個用Objective-C編寫的源代碼清單,你需要一個解釋器或編譯器來使這個清單工作。像Objective-C這樣的語言通常會被編譯,所以大多數人使用編譯器(如LLVM)。 Objective-C幾乎完全用於爲iOS和OS X開發,但也有其他用途 - 例如,有些人爲Linux編寫Objective-C。

您可以使用文本編輯器編寫源代碼和編譯器以將它們轉換爲實際程序,但使用現代技術需要處理更多內容,以便有另一個程序使您的工作更輕鬆。這些被稱爲集成開發環境(IDE)。 IDE爲您提供了編輯源代碼,編譯它們,調試生成的程序,閱讀文檔以及其他許多方法的便捷方法。 Xcode就是這樣一個IDE。這裏的一個重要觀察是Xcode不會自己編譯源代碼,它只是調用獨立編譯器(LLVM)。 Xcode不是您可以用來開發Objective-C應用程序的唯一IDE,例如AppCode

每次從頭開始編寫iOS或OS X應用程序將非常耗時。這就是爲什麼蘋果爲開發人員提供了一套完善的庫。這些庫僅僅是蘋果公司編寫的大量源代碼,而這個源代碼負責處理大多數應用程序的共同點。這些庫被稱爲可可。

現在,如果你無法弄清楚如何擴展一個類,那麼你很可能在談論Objective-C。它與Xcode或Cocoa沒有任何關係,你可以很好地編寫一些使用Vim作爲IDE和GCC作爲編譯器的Linux的代碼GNUstep。另一方面,如果你的Xcode構建過程由於某種神祕的設置而失敗,或者如果你想在Xcode中構建一個靜態庫,那顯然是一個Xcode問題。如果你不知道如何使用一些NSObject工具或NSFileManager類,那就是Cocoa。 (不過,這並不必須的Xcode相關的,因爲你可以使用AppCode或TextMate的作爲IDE!)


Originally available on my blog。在重新標記或解釋差異時,請隨時鏈接到博客文章或此問題。

+0

好帖子,但我得問,根據這個聲明......「這些圖書館被稱爲可可」...一個問題出現了,「基礎」和「可可」框架有什麼區別?可可坐在基金會框架之上嗎? – Leo

+0

是的,可可可以說是坐在基金會頂層的圖書館層(見http://goo.gl/H22M8g)。換句話說,這裏的描述有點不準確 - Cocoa只是Apple提供的用於編寫軟件的軟件棧的一部分。 – zoul

+0

非常好的和解釋性的答案..真的幫助我知道不同之處。但是,這裏來了另一個問題:)由可可圖書館;它與API相同嗎? – Ahmadgeo

6

Xcode是集成開發環境(IDE) - 開發人員用於編寫iOS和/或OS X軟件的應用程序。它包括編輯器,構建系統(確定要構建哪些內容以生成期望的目標) ,還有其他一些事情。 Objective-C是開發人員編寫此類軟件的主要語言。他們可能會在純C中使用C++,使用C++或將其與Objective-C(生成Objective-C++)組合,該程序完全使用另一種語言,例如MacRuby,Java(帶有j2objc)或C#(帶有MonoTouch)。

Xcode包含Clang編譯器,它將用Objective-C,C和其他幾種語言編寫的代碼轉換爲可執行代碼。大多數錯誤消息來自Clang,而且Xcode嚴重依賴它來進行搜索索引,語法突出顯示以及Objective-C代碼的名稱完成。

可可和Cocoa Touch是應用程序框架。每一個都是許多獨立框架的集合(存儲在名爲blahblah的文件夾中的庫。框架),如:

  • 基金會(兩者):一般的面向對象的實用程序,包括的NSString,NSURL,的NSFileManager等
    • 核心基金(兩者):晴同樣的事情,但不同的,主要是在具有基於C的API而不是目標C
  • 應用工具包(蘋果機):應用和窗口框架
  • UIKit的(IOS):應用和窗口框架
  • 核心的Gr aphics(兩者):繪製
  • 的Core Animation(兩者):雪碧管理和動畫框架

(以及許多他們來自哪裏,尤其是在Mac傳來更多)

所以:

  • 可以使用除可可或可可觸摸框架,但你必須有一些可可 /可可觸摸代碼,在一定程度上,爲了讓您的應用程序交談的系統,接收事件,繪製等等專門針對Mac和/或iOS將爲您提供不同級別的相關包裝。
  • 除了Objective-C之外,您還可以使用一種語言,但是由於Cocoa和Cocoa Touch的大部分功能都是爲Objective-C的獨特語法功能(特別是選擇器)設計的,因此會產生大量的語法尷尬。
  • 除了Xcode之外,您可以使用編輯器,甚至可以使用除Xcode之外的構建系統(例如make),但Apple的應用商店希望以特定方式構建應用程序(特別是在代碼簽名方面),所以除非您「不針對應用商店,任何其他構建系統都必須複製Xcode所做的事情,否則就有被用戶拒絕的風險。
1

一個明顯的錯誤是無法區分Xcode和其他東西。 Xcode是您用於編程的工具 - 編輯代碼,運行代碼等。因此,如果您在使用工具時遇到問題(例如,該窗口無法正確顯示您的代碼,或者您正在麻煩畫你的界面等),這是一個Xcode的問題。

如果你不明白爲什麼你的代碼不起作用,你可能有Objective-C問題或Cocoa問題。但你不一定知道哪個。

  • ,如果你的麻煩的根源是,你不知道怎麼的語言作品(例如,你不知道星號是什麼,或者該聲明是不實例化這是一個Objective-C的問題,或者那些消息不會出錯,但也不會做任何事情)。

  • 如果您沒有掌握委託架構或視圖控制器的工作原理,這是一個可可問題。

但我的人提出問題的方式的經驗是,你可能是無知的這些你是無知的哪個。我個人並不是指你,而是指我們所有人。這可能會讓你很難正確地提出問題,因爲你不知道你到底知道了什麼 - 如果你這樣做了,你就會知道,你可能不會有問題(你會解決問題並繼續下一件事)。