What Is Cocoa?

Cocoa是OS X和iOS操做系統的應用程序環境。它由面向對象類庫、運行時和集成開發環境組成。程序員

The Cocoa Environment

Cocoa是一個面向對象框架集,爲OS X和iOS應用程序提供了一個運行時環境。Cocoa是OS X上一個出衆的應用程序環境,而且是iOS上惟一的應用程序環境。編程

Introducing Cocoa

與全部應用程序環境同樣,Cocoa有運行時和開發兩個方面。設計模式

在運行時方面,Cocoa應用程序展現用戶界面,而且與操做系統其它可視化組件緊密集成;如在OS X中,這些應用有Finder,Dock及其它應用程序。數組

可是,程序員更感興趣的是開發方面。Cocoa提供了一個類庫用於建立應用程序。安全

在開發 Cocoa 軟件的時候,您可使用多種編程語言。基本的語言是 Objective-C。Objective-C 擁有本身 的 Cocoa 運行環境,是 ANSI C 的超集,它在 ANSI C 的語法和語義特性上進行擴展,使之支持面向對象的編程。因爲 Objective-C 是基於 ANSI C 的,您能夠自由地將 C 代碼直接和 Objective-C 代碼混合在一塊兒。並且,您的代碼能夠調用非 Cocoa 的編 程接口中定義的全部函數,好比 Carbon 和 BSD。您甚至能夠將 C++代碼混合到 Cocoa 代碼中,並將它們 鏈接在同一個執行文件中。網絡

最重要的是Cocoa類庫,它爲OS X提供了Foundation和AppKit兩個框架,爲iOS提供了Foundation和UIKit兩個框架。和全部框架同樣,這兩個框架不只包含動態共享庫(有時是幾個兼容版本的庫),還包含頭文件、API文檔、和相關的資源。Foundation和AppKit或UIKit將Cocoa可編程接口分爲非圖形用戶接口相關和圖形用戶接口相關兩部分。架構

How Cocoa Fits into OS X

Cocoa in the architecture of OS X
框架

How Cocoa Fits into iOS

Cocoa in the architecture of iOS
異步

一般,iOS的系統庫和框架包括UIKit是OS X上系統庫和框架的子集。編程語言

下面是iOS架構上每一層的簡要總結:

  • Core OS.
        這一層包含了內核、文件系統、基礎網絡、安全、電源管理和各類設備驅動。它也包含了一些系統庫。
  • Core Services.
        這層框架提供了核心服務,好比字符串處理、集合管理、網絡、URL工具、聯繫人管理和首選項等。一樣提供了設備硬件特性的服務,好比GPS,加速計等。包括了Core Location,Core Motion和System Configuration.
    這一層包含了Foundation和Core Foundation框架,爲通用數據類型提供抽象,好比字符串和集合。也包含了Core Data,對象持久化框架。
  • Media.
        這層框架依賴Core Services 層,爲Cocoa Touch層提供繪圖和多媒體服務。包括Core Graphics,Core Text,OpenGL ES,Core Animation,AVFoundation,Core Audio,video playback.
  • Cocoa Touch.
        這層框架直接支持iOS應用程序,包括Game Kit,Map Kit,iAd等。
    Cocoa Touch和Core Services層都有Objective-C框架,對iOS應用程序是極其重要的,是iOS上的核心框架。
  • UIKit。
        這個框架提供了在用戶界面上顯示的對象和爲程序行爲定義結構,包括事件處理和繪圖。
  • Foundation.
        這個框架定義了對象的基本行爲,爲它們的管理創建機制,提供基礎數據類型,集合,和操做系統服務。Foundation本質上是Core Foundation的面向對象版本。

 

The Cocoa Frameworks

是什麼使用一個程序成爲Cocoa程序呢?不是某個語言,由於在Cocoa開發中可使用幾種語言,也不是某個開發工具,由於可使用命令行建立Cocoa程序。那麼,Cocoa程序的共同點是什麼呢?使它們獨具特點的是它們都是由繼承自根類NSObject的對像組成,而且最終都基於Objective-C運行時,這種說法對於全部Cocoa框架都是正確的。

  • OS X: Foundation and AppKit
  • iOS: Foundation and UIKit

Foundation

Foundation框架定義了基礎類庫可用於任何類型的Cocoa程序。

Foundation框架基於下面一些目標來設計:

  1. 爲諸如內存管理、對象改變、和通告這樣的事物定義基本的對象行爲和引入一致的規則。 
  2. 經過程序包技術和 Unicode 字符串(和其它技術一塊兒)支持國際化和本地化。
  3. 支持對象的持久保存。
  4. 支持對象的分發。
  5. 在必定程度上獨立於操做系統,以支持移植。
  6. 爲編程的元類型提供對象封裝或等價物,好比數值、字符串、和集合,以及爲訪問底層系統實體 和服務提供工具類,好比端口、線程、和文件系統。

Foundation Paradigms and Policies

Foundation 爲 Cocoa 編程引入了幾個範式和策略,以保證程序中的對象在特定的環境下具備一致的行爲 和指望。包括: 

  1. 對象的全部權和對象的清除。Foundation 創建了一個對象全部權策略,用以代替垃圾收集機制。 該策略指定對象須要釋放本身建立、拷貝、或顯式保留的其它對象。NSObject(類和協議)定義了 保留和釋放對象的方法。自動釋放池(在 NSAutoreleasePool 類中定義)實現了一種遲緩釋放 (delayed-release)機制,使 Cocoa 程序在處理不禁調用者負責的返回對象上有一個一致的規則。
  2. 可變類的變體。在Foundation中,不少值和容器類的不可變類都有一個能夠修改的變體,可變類 老是不可變類的子類。若是您須要動態地改變一個通過封裝的值,或者改變這種對象的所屬關係,可 以建立一個可變類的實例。因爲它是從相應的不可變類繼承下來的,因此您能夠在接受不可變類型參 數的方法中傳入可變類的實例。
  3. 類簇。類簇是一個抽象類及一組私有的具體子類的組合,抽象類是這些子類的雨傘接口。根據不 同的上下文(特別是建立對象所用的方法),類簇能夠爲您返回恰當的、通過優化的類實例。舉例來 說,NSString和NSMutableString就是針對不一樣的存儲須要進行優化的各類私有子類實例的經紀 類。
  4. 通知。通知是Cocoa的主要設計模式。它基於廣播機制,該機制使一個對象(稱爲觀察者)能夠 在另外一個對象進行某種任務或遇到某種狀況時,以用戶或系統事件的方式獲得通告。產生通告的對象 可能並不知道通告觀察者的存在或身份。有幾種類型的通告:同步、異步、和分佈式通告。Foundation 的通告機制由NSNotification、NSNotificationCenter、NSNotificationQueue、和 NSDistributedNotificationCenter類實現的。

Foundation Classes

Foundation類層次的根是NSObject類,它(和NSObjectNSCopying協議一塊兒)定義了基本的對象屬性 和行爲。 

The Foundation class hierarchy,(藍色部分是OS X和iOS共有的,灰色部分是OS X獨有的)

將這些類進行邏輯分組,這些組中特別重要的類是值對象和集合:

  • 值對象。
    值對象封裝各類基元類型的值,包括strings, numbers(integers and floating-point values), dates, structures, pointers.它們以適當的方式間接訪問值和操縱它們。當你比較同一類型的值對象時,比較的是封裝的值,而不是它們的指針值。值對象常常是其它對象的屬性,包括自定義的對象。
    固然,你可能在程序中直接使用標量和其它基元類型。
    一些值對象的類有不變和可變之分,例如:NSData and NSMutableData,不可變的對象值不能改變。
    下面是值對象的要點描述:
    1. NSValue類的實例包裝了ANSI C或Objective-C數據,例如,標量類型如及指針和結構的浮點數據
    2. NSNumber是NSValue的子類,對數值的包裝,如 int,float,double
    3. NSData爲字節流提供面向對象的存儲。這個類中提供了寫和讀文件系統的方法
    4. NSDate、 NSCalendarDate、NSTimeZone、NSCalendar、NSDateComponents、和 NSLocale 類提供表明 時間、日期、日曆、和地域設置(locales)的對象。它們包含的方法能夠用於計算日期和時間差、以 各類格式顯示日期和時間、以及調整世界上各個位置時間和日期。
    5. NSString 是另外一類值對象,負責爲以 null 結尾的、具備特定編碼的字節數組提供面向 對象的存儲空間。它支持對 UTF-1六、UTF-八、MacRoman、和不少其它編碼的字符串之間進行轉換。 NSString 還提供對字符串進行檢索、組合、和比較、以及對文件系統路徑進行操做的方法。您能夠用 NSScanner 對象來對 NSString 對象中的數字和詞進行解析。NSCharacterSet(顯示在框圖中 的集合類部分)表明能夠在各個 NSString 和 NSScanner 方法中使用的一組字符。


  • 集合。
    集合是以必定的順序存儲和訪問其它對象(一般是數值)的對象。NSArray 的索引從 0 開 始,NSDictionary 使用鍵-值對,而 NSSet 則負責對象的隨機存儲(NSCountedSet 類使集合具備 惟一標識)。經過 NSEnumerator 對象,您能夠訪問一個集合中的元素序列。集合對象是屬性列表 的必要元素,和其它全部對象同樣,它也能夠被歸檔和分發。
  • 操做系統服務。
  • 通知。
  • 歸檔和序列化。
  • 表達式和條件判斷。
  • Objective-C 語言服務。
  • XML processing.
  • Spotlight queries.
  • Distributed objects.

 

UIKit (iOS)

相關文章
相關標籤/搜索