<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 3.4 Mac 編程基礎 這里我們重點講述在 Mac OS X 上編程相關的技能。 ### 3.4.1 你必須掌握的技能 一些周知的行業基礎技能就不多說了,像標準 C++、計算機英語這些都是必需的,下面 是在 Mac 上做開發需要的技能: + 熟練使用 Mac OS X 系統 + 了解 Mac OS X 的系統架構 + 熟悉 Mac OS X 文件系統 + 了解 Carbon 環境 + 熟悉 Cocoa 環境 + 熟練使用 Xcode + 能夠使用其它的編程工具輔助開發 ### 3.4.2 Mac OS X 的系統架構 首先我們通過下面的圖 3-6 了解一下 Mac OS X 系統的主要架構,它忽略了一些細 節,但是比較清晰的描繪了系統的主要組件和相互間的關系。 ![](https://box.kancloud.cn/2016-01-22_56a1a1446b158.png) 圖 3-6 Mac OS X 系統架構簡圖 同現代其它的操作系統一樣,在其內部結構上, Mac OS X 的是積木式的層次集合。這 種結構的特點是,系統的較低層實現包含有上層軟件所依賴的基礎服務,比如 OpenGL 框架 可能擔負底層繪圖任務,而內核層則負責任務調度或硬件管理。 圖 3-6 給出的是 Mac OS X 的系統架構圖,從中可以看到,系統最底層主要包含 Darwin,它是系統的核心;它的上層是繪圖與媒體層,為播放音頻視頻、渲染 2D/3D 圖形 提供了強大而專門的服務;再往上則是系統的 Framework 層,包含 Cocoa、Carbon 等應用 程序框架,這里是我們要學習的主要內容;最上層則是用戶層體驗層,包含 Aqua 和 Spotlight 等)令 Mac OS X 與眾不同的方法、技術和應用程序, 其中 Aqua 是 Mac OS X 的用戶界面, 對于一般的使用用戶而言, Mac OS X = Aqua。 更為詳細的 Mac OS X 分層結構請參見圖 3-7。 ![](https://box.kancloud.cn/2016-01-22_56a1a1447a341.png) 圖 3-7 Mac OS X 架構圖 ### 3.4.3 Mac OS X 文件系統 在任何一個操作系統當中,文件系統都是非常重要的部分,畢竟每個用戶都需要在文 件系統中保存自己的資料。在 Mac OS X 系統中,文件系統的組織結構扮演了非常重要的角 色,它能夠幫助用戶找到想要的文件。這種組織結構同時也讓應用和系統本身在為滿足用戶 需要而查找文件資源的時候更加簡單快捷。 Mac OS X 中的文件系統內核中有一套從 BSD 操作系統中繼承而來的目錄結構體系。 雖然大部分目錄都被 Finder 所隱藏,但是 BSD 世界中的很多元素都顯露無遺。其中文件權 限模型、符號鏈接以及用戶目錄等概念都來自于 BSD。Mac OS X 系統還增加了一些它自己 的概念用來向用戶提供一個安全精致的環境對文件和文件夾進行管理。 Mac OS X 在滿足了用戶期望的易用性的同時,它的設計目標也提供了強大和靈活的功 能特點。在這點上,這種文件系統向用戶提供一種統一的目錄結構,從而使用戶可以很容易 的找到資源。(這種統一風格對開發者也非常有用,他們開發的應用有時需要知道去哪里能 找到某些重要的資源。) 還有其它的一些文件系統固有風格,比如別名、擴展名隱藏和顯示 名稱等等都能夠改善用戶的使用感受。 Mac 文件系統涉及的內容很多,這里只介紹與 Qt 開發有緊密聯系的部分。 1.文件系統域 在多用戶系統中,控制用戶對系統資源的訪問對于維護系統的穩定是非常重要的。 Mac OS X 系統定義了好幾種文件系統域,每種文件系統域都提供了固定的文件夾用于存儲系統資源。在每種域當中,對資源的訪問權限是由當前用戶的權限決定的。 一共有四種文件系統域,用戶域、本地域、網絡域和系統域。 (1) 用戶域 用戶域中包含了某個用戶專有的資源。用戶域由當前登錄用戶的 home 目錄表示。Mac OS X 計算機的每個用戶在這個計算機上或者這個計算機所鏈接的本地局域網中都應該有一 個帳號。每個用戶帳號在文件系統中都有一個分配的空間,這個空間被叫做用戶 home 目 錄。這個目錄中存放了用戶的程序、資源以及文檔。用戶 home 目錄的名稱基于用戶的登錄 名稱,該名稱必須是唯一的。 用戶域使每個用戶擁有一個可以定制的工作環境成為可能。在用戶登錄的時候, Finder 會根據用戶域中的偏好設置,載入該用戶上次的工作環境和設置。類似的,應用程 序以及其它系統軟件也能夠利用用戶域中的信息載入:應用偏好設置、網絡設置、電子郵件 設置、字體設置、ColorSync 配置以及其它設置。 用戶 home 目錄的位置取決于用戶帳號。如果用戶帳號是計算機的本地帳號,那么用 戶的 home 目錄就在啟動卷的 Users 目錄當中。而如果用戶帳號是一個網絡帳號,那么 home 目錄就在網絡服務器上。如果不考慮 home 目錄的物理位置,Mac OS X 還沿用了 UNIX 系統的慣例,在某些時候用~ (波浪號)字符來表示用戶的 home 目錄。這個波浪號可 以和其它目錄名或者用戶名結合起來使用,表示特定的用戶目錄。表 3-9 對這個概念有所 說明。 表 3-9 利用波浪號表示 home 目錄中的位置 | ~ | 當前用戶 home 目錄的最高一層 | |:--- |:--- | | ~/Library/Fonts | 當前用戶 home 目錄中保存字體的目錄 | | ~Steve | 用戶 Steve 的 home 目錄最高一層 | 每個新用戶的 home 目錄都會包含一些缺省目錄和資源。 表 3-10 列出了你可能會在 用戶 home 目錄中看到的一些常見目錄。 表 3-10 Home 目錄的內容 | 用戶目錄 | 描述 | | --- | --- | | Applications | 包含僅僅當前用戶可用的應用 | | Desktop | 包含了 Finder 在當前登錄用戶桌面上顯示的桌面項 | | Documents | 包含了用戶的個人文檔 | | Library | 包含了應用設置、偏好設置一起其他用戶專有的系統資源 | | Movies | 包含了 QuickTime 以及其它格式的數字影片 | | Music | 包含數字音樂文件 (.aiff、.mp3、.m4p 及其它格式) | | Pictures | 包含各種格式的圖像文件 | | Public | 包含了用戶需要和其他用戶共享的內容。缺省情況下,其他用戶可以訪問這個目錄 | | Sites | 包含了用戶個人網站的網頁。如果需要其他用戶能夠訪問這些網頁,需要使 Web 共享 | 當用戶帳號創建時,Applications 目錄不會自動創建到他的 home 目錄中。不過,用戶可以自己創建一個 Applications 目錄,并把自己的應用放進去。系統會自動在這個位置 搜索應用。 系統通過一系列缺省權限保護用戶 home 目錄中的文件和目錄不受外界影響,用戶也 可以在任何時候改變這個缺省權限設置。用戶創建的任何目錄也都會繼承其上層目錄的權限 設置。 除了每個用戶的 home 目錄,Users 目錄也包含一個 Shared 子目錄。本地計算機上 的所有用戶都可以訪問該目錄,只有用戶可以訪問該目錄,應用不能將自己的內容存放在這 里,除非用戶指定這么作。任何用戶都可以往這個目錄中寫入文件、從中獲取文件或者讀取 其中的文件。盡管這個目錄與用戶域無關,但是它為用戶之間交換文檔和其它文件提供了一 個方便的途徑。 (2) 本地域 本地域中包含了本地可用但是系統運行時不需要的那些資源。本地域中的資源通常會包含應用、工具、定制字體、定制啟動項以及全局應用設置。本地域并不會對應一個單獨的物理目錄,而是包含了本地 boot ( 和 root)卷中的幾個目錄。擁有管理員權限的用戶可以 在這個域中增加、刪除和修改內容。 root 卷中的 Applications 和 Library 目錄包含了本地域的資源。計算機系統的當前用戶是可以訪問這些資源的,但是網絡中的其它計算機上的 用戶無法訪問。 計算機管理員如果需要這個系統中的所有用戶共享一些資源的話,他可以把這些資源 安裝到本地域當中。Apple 系統中應用都在/Applications 和 /Applications/Utilities 目錄中。第三方應用和工具也應該在這個目錄中。其它的系統資源,比如字體、 ColorSync 配置、偏好設置以及插件都應該安裝在 Library 目錄下適當的子目錄中。 (3) 網絡域 網絡域中的資源包括:本地局域網中的所有用戶共享的應用和文檔。這個域中的內容通常都位于網絡文件服務器,并且在網絡管理員的控制之下。 表 3-11 顯示了網絡域中的部分目錄。 表 3-11 網絡目錄 | 位置 | 描述 | | --- | --- | | /Network/Application s | 包含了本地網絡中所有用戶都能夠運行的應用 | | /Network/Library | 包含了一些本地網絡中所有用戶都可以使用的資源,如插件、文檔、框架、色彩以及字體 | | /Network/Servers | 包含了組成本地網絡的所有 NFS 文件服務器的掛接點 | | /Network/Users/ | 包含了所有本地網絡用戶的 home 目錄。這是 home 目錄的缺省路徑 | (4) 系統域 系統域包含了 Mac OS X 相同運行時候需要系統軟件和資源。系統域中的所有資源都 位于 root 卷的 /System 目錄中。這些資源都由 Apple 提供,只有 root 用戶可以修改該 目錄中的內容。 每個資源所屬的域說明了系統用戶對這個資源是否可以應用或者訪問。比如,一個安 裝在某用戶 home 目錄當中的字體只能被該用戶使用。如果一個管理員在網絡域中安裝相同 的字體,那么所有網絡用戶就都可以訪問它了。 缺省情況下,/System 目錄只包含了一個 Library 子目錄。這個子目錄中包含了許多 與系統中其它庫目錄中相同類型的資源。不過,在系統域中,這個目錄中還包含了一些核心 服務、框架以及組成 Mac OS X 系統的應用。 Mac OS X 系統對于每個域都提供了一套初始目錄用來組織其中包含的資源。 Mac OS X 系統在不同的域之間都會使用相同的目錄名稱保存相同類型的資源。這種名稱一致性能夠使 用到這些資源的用戶或者系統更加容易的查找資源。當系統需要查找某個資源的時候,它會 依次查找各個域,直到找到想要的資源。搜索開始與用戶域,然后依次查找本地域、網絡域 和系統域。 2\.庫目錄 庫目錄是一個專門用來存儲與應用相關的和與系統相關的資源的目錄。每個文件系統域都有一個它自己的庫目錄拷貝,其訪問級別與域類型是相匹配的。盡管應用可以利用這個目錄存儲內部數據或者臨時文件,可是該目錄并不是用來存儲應用包本身以及用戶數據文件 的。應用包存在于某個適當的/Applications 目錄,而用戶數據存在于用戶的根目錄下。 庫目錄還包含了許多標準的子目錄。由于系統例程會假定其中許多子目錄是存在的, 所以盡量不要刪除這些標準目錄。 表 3-12 列舉了對開發人員來說最相關的目錄。你可以根據這個表來確定在哪里存儲你 的軟件所需要的文件,當然這個表并不是完整的。 表 3-12 庫目錄的子目錄 | Application Support | 包含了應用相關的數據以及支持文件,比如第三方的插件,幫助應用,模板以及應 用使用到但是并不需要用來支持運行的額外資源文件。按照慣例,所有這些內容都 會被存儲在以應用名稱命名的子目錄當中。比如,MyApp 應用所用到的第三方資源 應該在 Application Support/MyApp/ 目錄中。需要注意,必須的資源文件應該 在應用包當中 | |:--- |:--- | | Assistants | 包含了幫助用戶進行配置或者其它任務的程序 | | Components | 包含了系統包和擴展 | | Contextual Menu Items | 包含了用于擴展系統級菜單的插件 | | Documentation | 包含了供計算機用戶和管理員參考的文檔文件和 Apple 幫助包。(Apple 幫助包在 Help 子目錄當中。) 在本地域中,這個目錄包含了 Apple 公司發布的幫助包(不 包括開發者文檔)。 | | Keyboards | 包含了鍵盤定義 | 3\.開發者目錄 Xcode 工具 CD 中包含了開發 Mac OS X 系統軟件所需要的應用、工具、文檔以及其 它資源。開發者可以在安裝 Mac OS X 系統的時候分別安裝以上工具。在安裝這些工具的時 候,安裝程序會把所有的軟件組件放在啟動卷的 /Developer 目錄中。表 3-13 列舉了這個 目錄的內容。 表 3-13 發者目錄的子目錄 | 目錄 | 內容 | | --- | --- | | Applications | 包含了用來管理和構建軟項目的應用。這些工具包括 Xcode 以及接口構造器,它們可以用來窗代碼和生 成接口。它還包含了一套性能工具、Java 工具、圖形工具以及通用工具 | | Documentation | 包含了另外一些與開發者相關的文檔 | | Examples | 包含了按照通用類型組織起來的范例項目。這些項目都是完全可以工作的,這些可以編譯運行的項目可以 幫助你更多的了解 Mac OS X 系統 | | Makefiles | 包含了用來編譯和轉換遺留項目的 makefiles 以及 jamfiles | | SDKs | 包含了用來為舊版本 Mac OS X 系統開發軟件的軟件開發工具包。每個 SDK 都包括 Mac OS X 特定版本 的頭文件和 stub 庫 | | Tools | 包含了命令行開發實用工具,包括那些用于創建和操作 HFS 資源 forks 的工具 | 4\.文件操作命令 再次提醒,Mac OS X 是類 Unix 系統,所以它的絕大多數文件操作命令與 Linux 是一致 的,這里不詳細展開,介紹幾個實用的技巧。 + 在 Mac OS X 中是區別大小寫字符的 比如 A.txt 不等于 a.txt。 + 系統的根目錄標志 / 并不是可有可無的 cd /System 表示轉到根目錄下的 System 中,而 cd System 表示轉到當前目錄下的 System 中,請大家注意其中的區別。 + 如何進入命令行操作模式 在圖形界面下,用 finder 打開 應用程序 》實用程序》終端 如果連圖形界面都進不去了(比如安錯了顯示驅動),開機時按 F8,用 `-s` 參數啟動,然后輸入命令 `mount -uw /` + 用 Tab 鍵自動補齊命令 比如你想到 /System 目錄中去,輸入 cd /Sy 然后按一下 Tab 鍵,命令就會自動補齊成 cd /System + 操作帶名字中帶有空格的文件和目錄 空格在命令中寫成 \空格, 比如要進入 My Documents,命令為 cd My\ Documents + 查看命令的詳細幫助 命令是:man 命令名,比如要看看 ls 命令的詳細用法,執行 man ls。 需要特別指出的是,大家不要有 Windows 下的盤符概念。Mac OS X 的所有文件都掛在根目錄 / 下面。硬盤都掛在 /Volumes 下。比如你的移動硬盤叫做 USBHD,那么接上后桌面上會顯示出一個硬盤圖標,它實際在哪里呢?你在終端里執行 ls /Volumes/USBHD, 看看 顯示出的是不是這個移動硬盤的內容。表 3-14 列出了常見的一些目錄: 表 3-14 Mac OS X 常見目錄 | 根目錄位置 | / | |:--- |:--- | | 驅動所在位置 | /Systme/Library/Extensions | | 用戶文件夾位置 | /User/用戶名 | | 桌面的位置 | User/用戶名/Desktop | | 硬盤掛載位置 | /volumes/YourHdName | ### 3.4.4 Cocoa 應用開發簡介 Cocoa Framework 簡稱 Cocoa,是 Mac OS X 上原生支持的應用程序開發框架 。從 1989 年至今 ,Cocoa 一直在努力改進和完善。它設計優美,適合 RAD( Rapid Application Development)。無論你是資深的 Mac 開發“老鳥”,還是即將踏入 Mac 開發世界的新人, Cocoa 都是構建 Mac OS X 應用程序最強大、最高效的工具之一。 Cocoa 應用程序已經逐步成為 Mac OS X 的規范。 例如 iPhoto 和 Safari 都 是 Cocoa 應用程序,這些應用程序以設計巧妙的聰明的設計,豐富的功能以及吸引人的用戶界 面得到了廣泛的好評,而這些歸根結底都是 Cocoa 的功勞。 1\.Cocoa 環境 與許多的應用程序環境一樣, Cocoa 同時擁有一個運行時間外觀和一個開發外觀。在 它的運行時間外觀里, Cocoa 應用程序呈現 Aqua 的外觀,并且能夠與操作系統的其它部 分如可視化部件、應用程序等緊密結合。 Cocoa 的開發外觀是一套集成的面對對象的軟件構件,它使得開發人員創建 Mac OS X 應用程序成為一件容易和快樂的事情。使用 Cocoa,你可以在 Mac OS X 的世界里“為所欲 為”。 在開發 Cocoa 軟件時主要的語言是 Objective-C , Objective-C 是 ANSI C 的一個超集,它擴展了特定的語法和語意功能(從 Smalltalk 衍生出來)來支持面對對象的編程。添加的不多的約定都比較簡單而且容易學習和使用。因為 Objective-C 以 ANSI C 為 基礎,您可以自由的混合使用純 C 語言代碼和 Objective-C 代碼。 2\.Cocoa 在 Mac OS X 中的位置 圖 3-8 準確的描述了 Cocoa 在 Mac OS X 架構中的位置。Mac OS X 由一系列軟件層組 成,自下而上分別是最底層的 Darwin ,中間的“核心服務”和“應用服務”層,上層軟 件依賴下層軟件提供的服務才能運行。 Mac OS X 中全部組成部分,包括 Cocoa ,最終都依 賴 Darwin 才能工作。 ![](https://box.kancloud.cn/2016-01-22_56a1a144add16.png) 圖 3-8 Cocoa 在 Mac OS X 的架構中 ### 3.4.5 Xcode 簡介 Xcode 是 Apple 自己開發的,只運行在 Mac OS X 平臺下的 IDE。如果你想真正了解 Mac OS X 平臺上的開發,就應該了解它。當然, Mac OS X 實現了 POSIX,固然也支持傳統的 UNIX 編程環境;Eclipse 等 Java 開發工具也有 Mac OS X 版。不過這些,你在 Linux 或者 Windows 平臺也能體驗到。注意,Xcode 只是一個 IDE,Apple 并沒有自己專屬的編譯器。 事實上創建項目的時候,Xcode 仍然是在調用 GCC 命令。所以如果你很熟悉 UNIX 下的編 程,你完全可以不用 Xcode,在命令行編譯 Cocoa 應用程序,也是很有樂趣的。 Xcode 功能強大,它支持軟件生命周期的全部過程,一旦使用,你就會很難放棄它。事 實上,目前 Xcode 幾乎成為了多數 Mac 開發者的唯一選擇。非常開心的是 Xcode 是免費 的,只要你有一臺 Mac,隨機帶的安裝盤里就 有 Xcode,升級也是免費的,不過如果你用的 是 Mac OS 10.5 以前版本的 OS,你將不能運行 Xcode 3.0 或以上的版本,而我們恰恰推薦 你使用 Xcode3.0,所以要很好的選擇你的 Mac OS X 的版本。 Xcode 編譯用 C, C++, Objective-C, Objective-C++, 和 Java 編寫的源代碼工程。 它產生所有 Mac OS X 上支持的可執行代碼類型,包括命令行工具,框架,插件,內核擴 展,包,和應用程序。 Xcode 允許幾乎無限制的自定義編譯和調試工具,執行代碼打包(包括信息屬性列表和本地化的包),編譯過程(包括拷貝文件,腳本文件和其它編譯階段),以及用戶界面(包括分開的,多視圖的代碼編輯器)。如果您的代碼在一個 CVS 庫里, Xcode 提供了源代碼控制,允許您添加文件到庫里,確定修改,獲得更新的版本,以 及比較版本。圖 3-9 展示了一個在 Xcode 里的工程的例子。 ![](https://box.kancloud.cn/2016-01-22_56a1a144bf266.png) 圖 3-9 Xcode 中的 TextEdit 工程例子 Xcode 特別適合于 Cocoa 開發。在您創建一個工程的時候, Xcode 使用對應于 Cocoa 工程類型的工程模版為您設置一個起始的開發環境,工程類型有:應用程序( Objective-C 或者 Java ),基于文檔的應用程序( Objective-C 或者 Java ),工 具,包,和框架。 Xcode 使用 GNU C 編譯器( gcc )編譯 Cocoa 軟件,使用 GNU 源代碼級別調試器( gdb )調試這些軟件。 gcc 和 gdb 在 Cocoa 還是 NeXTSTEP (請參考 “歷史簡介”)的時候就被用于 Cocoa 的開發,經過若干年一直被精雕細琢,擴展,并且 調優以支持 Cocoa 二進制代碼的編譯和調試。 Xcode 還有一個類瀏覽的功能,您可以察看所有輸入的 Cocoa 框架和任何您的自定義類,這些類按照它們繼承關系排列;在類瀏覽器 里您可以請求任何類的文檔。 要獲得更多信息,請參考 Xcode 在蘋果開發人員聯盟網站( http://www.apple.com.cn/developer/ )上的 Xcode 主頁,在那里您可以鏈接到 Xcode 最新的文檔,這里就不再贅述了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看