關于我們
書單推薦
新書推薦
|
Objective-C程序設計-第6版
《Objective-C程序設計》是為在蘋果iOS和OS X平臺上,使用Objective-C語言和面向對象程序設計模式進行專業(yè)開發(fā)而編寫的簡潔、細致的入門讀物。本書假設讀者無面向對象程序語言或C語言編程經(jīng)驗,以保障初學者與有經(jīng)驗的程序員一樣,可用本書迅速和有效地學習Objective-C。本書提供的學習方法獨特,結合眾多程序示例及章末練習,使得《Objective-C程序設計(第6版)》同時適合自學和課堂教學。第6版已全面更新,充分納入Objective-C的新功能與技術,同時覆蓋對新版Xcode、iOS和Mac OS X Mavericks的介紹。
Objective-C已經(jīng)成為Mac OS X與iOS平臺上開發(fā)應用程序的標準程序設計語言。這一簡單但強大的面向對象語言是以C語言為基礎的。Objective-C除了可在Apple的操作系統(tǒng)平臺上使用外,也適用于其他的操作系統(tǒng),包括 Linux、UNIX 以及Windows。
本書是針對初學者編寫的一個完整又循序漸進的Objective-C語言權威入門。閱讀本書,不需要先學過C語言或其他面向對象語言。本書包含許多詳細且實用的范例,用來告訴你如何在實踐中運用Objective-C。 本書第6版的內(nèi)容已全面更新,覆蓋新版iOS 、Xcode及OS X Mavericks等所有重要升級要點。 本書完整展示如何利用Foundation framework所提供的豐富自帶類庫(Library of classes),并對iOS 程序設計原理有所講解。
預覽目錄
1引言 1 第一部分Objective-C語言 2Objective-C編程 9 3類、對象和方法 29 4數(shù)據(jù)類型和表達式 53 5循環(huán)結構 73 6選擇結構 95 7類 129 8繼承 155 9多態(tài)、動態(tài)類型和動態(tài)綁定 181 10變量和數(shù)據(jù)類型 199 11分類和協(xié)議 223 12預處理程序 239 13基本的C語言特性 253 第二部分Foundation框架 14Foundation框架簡介 311 15數(shù)字、字符串和集合 315 16使用文件 379 17內(nèi)存管理和自動引用計數(shù) 409 18復制對象 423 19歸檔 435 第三部分Cocoa、Cocoa Touch與iOS的SDK 20Cocoa和Cocoa Touch簡介 453 21編寫iOS應用程序 457 附錄A術語表 489 附錄B地址簿示例源代碼 501 目錄 1引言 1 1.1 本書內(nèi)容 2 1.2 本書組織方式 3 1.3 支持 5 1.4 致謝 6 1.5 第6版前言 7 第一部分Objective-C語言 2Objective-C編程 9 2.1 編譯并運行程序 9 2.1.1 使用Xcode 10 2.1.2 使用Terminal 17 2.2 解釋第一個程序 20 2.3 顯示變量的值 24 2.4 小結 26 2.5 練習 27 3類、對象和方法 29 3.1 到底什么是對象 29 3.2 實例和方法 30 3.3 用于處理分數(shù)的Objective-C類 32 3.4 @interface部分 35 3.4.1 選擇名稱 35 3.4.2 類方法和實例方法 37 3.5 @implementation部分 39 3.6 program部分 41 3.7 實例變量的訪問及數(shù)據(jù)封裝 47 3.8 小結 51 3.9 練習 51 4數(shù)據(jù)類型和表達式 53 4.1 數(shù)據(jù)類型和常量 53 4.1.1 int類型 53 4.1.2 float類型 54 4.1.3 char類型 54 4.1.4 限定詞:long、long long、short、unsigned及signed 55 4.1.5 id類型 56 4.2 算術表達式 57 4.2.1 運算符的優(yōu)先級 57 4.2.2 整數(shù)運算和一元負號運算符 60 4.2.3 模運算符 62 4.2.4 整型值和浮點值的相互轉換 63 4.2.5 類型轉換運算符 65 4.3 賦值運算符 66 4.4 Calculator類 67 4.5 練習 70 5循環(huán)結構 73 5.1 for語句 74 5.1.1 鍵盤輸入 81 5.1.2 嵌套的for循環(huán) 83 5.1.3 for循環(huán)的變體 85 5.2 while語句 86 5.3 do語句 90 5.4 break語句 92 5.5 continue語句 92 5.6 小結 93 5.7 練習 93 6選擇結構 95 6.1 if語句 95 6.1.1 if-else結構 100 6.1.2 復合條件測試 103 6.1.3 嵌套的if語句 106 6.1.4 else if結構 107 6.2 switch語句 117 6.3 Boolean變量 120 6.4 條件運算符 125 6.5 練習 127 7類 129 7.1 分離接口和實現(xiàn)文件 129 7.2 合成存取方法 135 7.3 使用點運算符訪問屬性 137 7.4 具有多個參數(shù)的方法 139 7.4.1 不帶參數(shù)名的方法 141 7.4.2 關于分數(shù)的操作 141 7.5 局部變量 145 7.5.1 方法的參數(shù) 146 7.5.2 static關鍵字 147 7.6 self關鍵字 150 7.7 在方法中分配和返回對象 151 7.7.1 擴展類的定義和接口文件 153 7.8 練習 153 8繼承 155 8.1 一切從根類開始 155 8.1.1 找出正確的方法 159 8.2 通過繼承來擴展:添加新方法 160 8.2.1 Point類和對象創(chuàng)建 164 8.2.2 @class指令 165 8.2.3 具有對象的類 169 8.3 覆寫方法 173 8.3.1 選擇哪種方法 174 8.4 抽象類 177 8.5 練習 178 9多態(tài)、動態(tài)類型和動態(tài)綁定 181 9.1 多態(tài):相同的名稱,不同的類 181 9.2 動態(tài)綁定和id類型 184 9.3 編譯時和運行時檢查 186 9.4 id數(shù)據(jù)類型與靜態(tài)類型 187 9.4.1 動態(tài)類型的參數(shù)和返回類型 188 9.5 有關類的問題 189 9.6 使用@try處理異常 194 9.7 練習 196 10變量和數(shù)據(jù)類型 199 10.1 對象的初始化 199 10.2 作用域回顧 203 10.2.1 關于屬性、存取方法和實例變量 203 10.2.2 全局變量 204 10.2.3 靜態(tài)變量 206 10.3 枚舉數(shù)據(jù)類型 208 10.4 typedef語句 212 10.5 數(shù)據(jù)類型轉換 213 10.5.1 轉換規(guī)則 213 10.6 位運算符 215 10.6.1 按位與運算符 216 10.6.2 按位或運算符 217 10.6.3 按位異或運算符 218 10.6.4 一次求反運算符 218 10.6.5 向左移位運算符 220 10.6.6 向右移位運算符 221 10.7 練習 221 11分類和協(xié)議 223 11.1 分類 223 11.2 類的擴展 228 11.2.1 關于分類的注意事項 229 11.3 協(xié)議和代理 230 11.3.1 代理 233 11.3.2 非正式協(xié)議 234 11.4 合成對象 235 11.5 練習 236 12預處理程序 239 12.1 #define語句 239 12.1.1 更高級的定義類型 241 12.2 #import語句 246 12.3 條件編譯 247 12.3.1 #ifdef、#endif、#else和#ifndef語句 248 12.3.2 #if和#elif預處理程序語句 250 12.3.3 #undef語句 251 12.4 練習 251 13基本的C語言特性 253 13.1 數(shù)組 254 13.1.1 數(shù)組元素的初始化 256 13.1.2 字符數(shù)組 257 13.1.3 多維數(shù)組 258 13.2 函數(shù) 260 13.2.1 參數(shù)和局部變量 262 13.2.2 函數(shù)的返回結果 263 13.2.3 函數(shù)、方法和數(shù)組 267 13.3 塊(Blocks) 268 13.4 結構 272 13.4.1 結構的初始化 275 13.4.2 結構中的結構 276 13.4.3 關于結構的補充細節(jié) 278 13.4.4 不要忘記面向對象編程思想 279 13.5 指針 279 13.5.1 指針和結構 283 13.5.2 指針、方法和函數(shù) 285 13.5.3 指針和數(shù)組 287 13.5.4 指針運算 297 13.5.5 指針和內(nèi)存地址 299 13.6 它們不是對象 299 13.7 其他語言特性 300 13.7.1 復合字面量 300 13.7.2 goto語句 301 13.7.3 空語句 301 13.7.4 逗號運算符 301 13.7.5 sizeof運算符 302 13.7.6 命令行參數(shù) 303 13.8 工作原理 305 13.8.1 事實#1:實例變量存儲在結構中 306 13.8.2 事實#2:對象變量實際上是指針 306 13.8.3 事實#3:方法是函數(shù),而消息表達式是函數(shù)調用 307 13.8.4 事實#4:id類型是通用指針類型 307 13.9 練習 307 第二部分Foundation框架 14Foundation框架簡介 311 14.1 Foundation文檔 311 15數(shù)字、字符串和集合 315 15.1 數(shù)字對象 315 15.2 字符串對象 321 15.2.1 NSLog函數(shù) 321 15.2.2 description方法 322 15.2.3 可變對象與不可變對象 323 15.2.4 可變字符串 330 15.3 數(shù)組對象 336 15.3.1 制作地址簿 341 15.3.2 數(shù)組排序 358 15.4 詞典對象 364 15.4.1 枚舉詞典 366 15.5 集合對象 369 15.5.1 NSIndexSet 373 15.6 練習 375 16使用文件 379 16.1 管理文件和目錄:NSFileManager 380 16.1.1 使用NSData類 385 16.1.2 使用目錄 386 16.1.3 枚舉目錄中的內(nèi)容 389 16.2 使用路徑:NSPathUtilities.h 391 16.2.1 常用的路徑處理方法 394 16.2.2 復制文件和使用NSProcessInfo類 396 16.3 基本的文件操作:NSFileHandle 400 16.4 NSURL類 405 16.5 NSBundle類 406 16.6 練習 407 17內(nèi)存管理和自動引用計數(shù) 409 17.1 自動垃圾收集 411 17.2 手工管理內(nèi)存計數(shù) 411 17.2.1 對象引用和自動釋放池 412 17.3 事件循環(huán)和內(nèi)存分配 414 17.4 手工內(nèi)存管理規(guī)則的總結 416 17.5 自動引用計數(shù)(ARC) 417 17.6 強變量 418 17.7 弱變量 419 17.8 @autoreleasepool塊 420 17.9 方法名和非ARC編譯代碼 420 18復制對象 423 18.1 copy和mutableCopy方法 424 18.2 淺復制與深復制 426 18.3 實現(xiàn) 18.4 用設值方法和取值方法復制對象 431 18.5 練習 433 19歸檔 435 19.1 使用XML屬性列表進行歸檔 435 19.2 使用NSKeyedArchiver歸檔 437 19.3 編碼方法和解碼方法 439 19.4 使用NSData創(chuàng)建自定義檔案 446 19.5 使用歸檔程序復制對象 450 19.6 練習 451 第三部分Cocoa、Cocoa Touch與iOS的SDK 20Cocoa和Cocoa Touch簡介 453 20.1 框架層 453 20.2 Cocoa Touch 454 21編寫iOS應用程序 457 21.1 iOS SDK 457 21.2 第一個iPhone應用程序 457 21.2.1 創(chuàng)建新的iPhone應用程序項目 460 21.2.2 輸入代碼 463 21.2.3 設計界面 466 21.3 iPhone分數(shù)計算器 474 21.3.1 啟動新的Fraction_Calculator項目 475 21.3.2 定義視圖控制器 476 21.3.3 Fraction類 481 21.3.4 處理分數(shù)的Calculator類 485 21.3.5 設計UI 486 21.4 小結 487 21.5 練習 488 附錄A術語表 489 附錄B地址簿示例源代碼 501
C程序設計語言是由AT&T貝爾實驗室的Dennis Ritchie于20世紀70年代早期首創(chuàng)的。但是,直到20世紀70年代晚期,這種程序設計語言才獲得了廣泛的支持并流行開來。因為在此之前,C編譯器還不能用于貝爾實驗室以外的商業(yè)用途。最初,UNIX操作系統(tǒng)有可能更快的普及速度也在某種程度上促進了C語言的快速普及,UNIX操作系統(tǒng)幾乎完全是由C語言編寫的。
Brad J.Cox在20世紀80年代早期設計了Objective-C語言,它以一種叫作SmallTalk-80的語言為基礎。Objective-C在C語言的基礎上加了一層,這意味著對C進行了擴展,從而創(chuàng)造出一門新的程序設計語言,支持對象的創(chuàng)建和操作。 1988年,NeXT計算機公司獲得了Objective-C語言的授權,并發(fā)展了Objective-C的語言庫和一個開發(fā)環(huán)境,即NEXTSTEP。1992年,自由軟件基金會的GNU開發(fā)環(huán)境增加了對Objective-C的支持。所有Free Software Foundation(FSF)產(chǎn)品的版權歸FSF所有。它以GNU通用公共許可證來發(fā)布產(chǎn)品。 1994年,NeXT計算機公司 和Sun公司聯(lián)合發(fā)布了一個針對NEXTSTEP系統(tǒng)的標準規(guī)范,名為OPENSTEP。OPENSTEP在FSF’s的實現(xiàn)名稱為GNUStep。有一個Linux版本,它包括Linux內(nèi)核和GNUStep開發(fā)環(huán)境,這個Linux發(fā)行版被十分貼切地命名為LinuxSTEP。 1996年12月20日,蘋果公司宣布收購NeXT軟件公司,NEXTSTEP/OPENSTEP環(huán)境將成為蘋果操作系統(tǒng)下一個主要發(fā)行版本OS X的基礎。這個開發(fā)環(huán)境的版本被蘋果公司稱為Cocoa。它內(nèi)置了對Objective-C語言的支持,并結合了Project Builder(或它的后繼版本Xcode)和Interface Builder等開發(fā)工具,蘋果公司為Mac OS X上的應用程序開發(fā)創(chuàng)建了一個功能強大的開發(fā)環(huán)境。 2007年,蘋果公司發(fā)布了Objective-C語言的升級版,并稱為Objective-C 2.0。本書第2版已涵蓋了該版本語言的內(nèi)容。 當iPhone于2007年發(fā)布時,開發(fā)人員們要求為這款革新性的設備開發(fā)應用程序。起初,蘋果公司不歡迎第三方應用程序開發(fā)。蘋果公司安撫那些超級崇拜iPhone的開發(fā)人員的辦法,就是允許他們開發(fā)基于Web的應用。這些基于Web的應用在iPhone內(nèi)置的Safari Web瀏覽器下運行,但需要用戶連接到托管該應用程序的網(wǎng)站;赪eb應用的很多固有限制,開發(fā)人員對此非常不滿,于是蘋果公司不久之后就宣布,開發(fā)人員能夠為iPhone開發(fā)所謂的本機應用。 本機應用是駐留在iPhone上并且在iPhone操作系統(tǒng)下運行的應用,其運行方式與該設備上運行的內(nèi)置iPhone應用(如Contacts、Stocks和Weather)相同。iPhone的操作系統(tǒng)實際上是某個OS X版本,這意味著可以在MacBook Pro上開發(fā)并調試這些應用。實際上,蘋果公司很快就提供了強大的軟件開發(fā)套件(SDK),允許快速開發(fā)iPhone應用并進行調試。iPhone模擬器使得開發(fā)人員能夠直接在開發(fā)系統(tǒng)上調試其應用,而無須在真機設備上進行。 隨著2010年iPad的推出,蘋果公司開始統(tǒng)一操作系統(tǒng)上使用的術語和SDK,以支持使用不同尺寸的物理屏幕和屏幕分辨率的各種設備。在本書寫作時已能夠通過iOS SDK為各種iOS設備開發(fā)應用程序,當前發(fā)布的操作系統(tǒng)版本為iOS 7。 1.1 本書內(nèi)容 在計劃編寫這本有關Objective-C的圖書時,我必須做出一些基本的決策。和其他介紹Objective-C的內(nèi)容一樣,可以假定讀者已經(jīng)知道如何編寫C語言程序?梢詮氖褂秘S富的例程庫(例如,F(xiàn)oundation框架和UIKit框架)的角度介紹這門語言。介紹如何使用一些開發(fā)工具(如Mac的Xcode和設計UI使用的Interface Builder等)。 但是采用這種方式有一些問題:首先,學習Objective-C之前必須完整地學習C語言,這種說法是錯誤的。C語言是一門過程性的編程語言,有很多特性是在使用Objective-C進行程序設計時不必要的,特別是對于初學者。事實上,采用其中的某些特性違反了堅持良好的面向對象的程序設計方法的本質。同樣,在學習面向對象的編程語言之前,最好不要了解過程性語言的所有細節(jié)。這會導致程序員誤入歧途,并在養(yǎng)成良好的面向對象的程序設計風格方面造成錯誤的導向和思維定式。Objective-C是C語言的擴展,但這并不意味著必須首先學習C語言。 因此,我既不首先講述C語言,也不事先假定你具備了該語言的知識。相反,我決定采用一種非常規(guī)的方式,從面向對象編程的視角出發(fā),將Objective-C和基礎的C語言作為一門單獨的集成語言來講解。顧名思義,本書的目的是教你如何使用Objective-C 進行程序設計。這并不表示我會詳細介紹可用于開發(fā)和調試程序的工具,或者講解如何開發(fā)交互式圖形應用。學會如何使用Objective-C編寫程序后,所有的這些資料都可在其他地方獲得。事實上,你會發(fā)現(xiàn)在具備了如何使用Objective-C進行程序設計的堅實基礎后,掌握這些知識是輕而易舉的。本書并不假設讀者需要編程經(jīng)驗,即使有,也不會很多。如果你是一名程序設計的初學者,通過一些努力,你應該可以將Objective-C作為第一門程序設計語言。根據(jù)本書前幾版的反饋,其他讀者已經(jīng)做到了。 本書以示例的方式講述Objective-C語言。在介紹這門語言的每個新特性時,通常會提供一個完整的小例子來闡述這一特性。正如“一圖勝千言”一樣,一個經(jīng)過嚴格篩選的例子也有如此功效。強烈建議運行每個程序,并比較系統(tǒng)中獲得的結果與本書中的結果。這么做,你不僅可以學會Objective-C語言及其語法,而且還能熟悉編譯和運行Objective-C程序的過程。 1.2 本書組織方式 本書從邏輯上分為三部分:第一部分(第1~13章)是“Objective-C語言”,介紹該語言的基礎知識。第二部分(第14~19章)是“Foundation框架”,講述如何使用構成Foundation框架的種類豐富的預定義。第三部分(第20、21章)是“Cocoa、Cocoa Touch和iOS SDK”,簡要介紹Cocoa和Cocoa Touch框架,然后逐步演示如何使用iOS SDK開發(fā)簡單的iOS應用。 框架就是一組從邏輯上組合在一起的類和例程,它們使開發(fā)程序變得更加容易。使用Objective-C進行程序設計時需要的許多能力都來源于大量可用的框架。 第2章“Objective-C編程”,首先講述如何使用Objective-C編寫第一個程序。 因為本書并非主要講解Cocoa或者iOS程序設計,所以在第三部分之前沒有過多地介紹圖形用戶界面(GUI),甚至很少提及它。這就需要使用一種方法實現(xiàn)程序輸入并產(chǎn)生輸出。本書中的大多數(shù)例子都是從鍵盤獲得輸入,并在一個窗口中產(chǎn)生輸出的:如果在命令行中,那么這個窗口是Terminal窗口;如果使用Xcode,那么這個窗口是調試輸出窗口。 第3章“類、對象和方法”,介紹了面向對象程序設計的基礎。本章引入了一些術語,但數(shù)量控制到了最少。另外還介紹了定義類的機制,以及向實例或對象發(fā)送消息的方式。教師或者有經(jīng)驗的Objective-C程序員將會注意到,本書使用靜態(tài)類型聲明對象。我認為這種方法是學生起步的最好方式,因為編譯器能捕捉更多的錯誤,程序有更強的自文檔化(self-documenting)功能,同時還能鼓勵新程序員顯式地聲明已知的數(shù)據(jù)類型。這樣,id類型的概念及其強大功能直到第9章“多態(tài)、動態(tài)類型和動態(tài)綁定”才會完全展現(xiàn)出來。 第4章“數(shù)據(jù)類型和表達式”,描述了基本的Objective-C數(shù)據(jù)類型,以及如何在程序中使用它們。 第5章“循環(huán)結構”,介紹了在程序中可以使用的3種循環(huán)語句,即for、while和do。 第6章“選擇結構”,詳細講述了Objective-C語言的if和switch語句。判斷語句是任何計算機程序設計語言的基礎。 第7章“類”,更深入地研究了類和對象的使用,詳細討論了方法、方法的多個參數(shù)及局部變量的相關內(nèi)容。 第8章“繼承”,介紹了繼承的主要概念。這一特性使得程序更容易開發(fā),因為我們可以利用以前編寫的代碼,使用繼承及子類的概念可以方便地修改和擴展現(xiàn)有的類定義。 第9章討論了Objective-C語言的3個重要特性。多態(tài)、動態(tài)類型及動態(tài)綁定是本章的關鍵概念。 第10章至第13章對Objective-C進行了深入討論,既包含對象的初始化、區(qū)塊、協(xié)議、分類、預處理程序,還包括一些基本的C語言特性,如函數(shù)、數(shù)組、結構和指針。第一次開發(fā)面向對象的程序時,通常不必(最好避免)使用這些特性。建議你首次通讀本書時略過第13章,只在需要更多地了解這門語言的特殊特性時,再回來學習它。 第二部分從第14章開始,這部分介紹Foundation框架,以及如何使用它的大量文檔。 第15章至第19章講解了Foundation框架的重要特性,包括數(shù)字和字符串對象、集合、文件系統(tǒng)、內(nèi)存管理及對象的復制和歸檔。 學習完第二部分后,你將能夠使用Foundation框架開發(fā)出相當復雜的Objective-C程序。 第三部分從第20章“Cocoa和Cocoa Touch簡介”開始,本章簡要介紹了框架,它提供了在Mac和iOS設備上開發(fā)復雜圖形應用所需的各種類。 第21章介紹了iOS SDK和UIKit框架。本章闡述了如何以迭代的方式編寫簡單的iOS應用,然后列舉了一個計算器應用的示例,通過它可使用iPhone進行簡單的分數(shù)算術運算。 因為面向對象的用語涉及大量術語,所以本書附錄A提供了一些常用術語的定義。 附錄B“地址簿示例源代碼”,給出了本書第二部分中開發(fā)并大量使用的兩個類的源代碼。這些類定義了地址卡和地址簿類,其中的方法提供了一些簡單的操作,如在地址簿中添加和刪除地址卡、查找某人、列出地址簿的內(nèi)容等。 學會如何編寫Objective-C程序后,可以繼續(xù)向幾個不同的方向發(fā)展。你可能希望學習有關C語言的更多內(nèi)容,或開始編寫在OS X上運行的Cocoa程序,或者你可能想開發(fā)更復雜的iOS應用。 1.3支持 讀者可在classroomM.com/objective-c論壇查找到更加豐富的內(nèi)容,可以獲取到一些源代碼(這里并不能找到所有例子的“官方”源代碼,本人堅信學習過程的最大一部分在于自己輸入例子中的程序,并且學習如何判斷和修正錯誤)、練習的答案、勘誤表和測驗題;也可以向我或其他論壇中的成員提問題。這個論壇有積極的成員,他們樂于幫助其他成員解決疑問,并且答復一些問題,使之變成內(nèi)容豐富的社區(qū)。請加入并參與進來吧! 1.4 致謝 我要感謝在本書第 1 版的準備階段為我提供幫助的朋友們。首先,要感謝Tony Iannino和Steven Levy對原稿的審閱,并感謝Mike Gaines對本書的貢獻。 其次,還要感謝本書的技術編輯Jack Purdum(第1版),Wendy Mui(第3版)和Mike Trent(第1,2,5,6版)。我格外地幸運,因為Mike審閱了本書的兩個版本,他對我編寫的本書前兩版都進行了最詳細的審閱,不僅指出了書中的不足之處,而且還十分慷慨地提出了建議。正是因為Mike對第1版提供的意見,我改變了介紹內(nèi)存管理的方法,并盡力確保本書中的每個示例都是“無漏洞的”。在第4版之前,內(nèi)存管理是比較重要的內(nèi)容,但引入ARC后,這部分內(nèi)容變得過時了。Mike還為有關iPhone程序設計的章節(jié)做出了很多貢獻。 在第1版中,Catherine Babin提供了封面的圖片,他還提供了許多有價值的圖片供我選擇。朋友為我制作的封面的藝術效果,使得本書具有更強的專業(yè)性。 我非常感謝Pearson的Mark Taber(所有的版本),他忍受了我的推遲交稿,并且非常和藹地讓我按照自己的進度工作。同樣的榮譽給皮爾遜的Mandie Frank。Mandie為我的延遲交付不知疲倦地工作,以幫助本書的各種版本及時出版。我非常感謝Michael de Haan和Wendy Mui不可思議地主動要求完成校對第2版的工作。 注意 正如先前介紹的,Dennis Ritchie發(fā)明了C語言,他也是UNIX操作系統(tǒng)的共同發(fā)明者,這是OS X和iOS的基礎。但遺憾的是,2011年,在一個星期內(nèi)這個世界失去了Dennis Ritchie和Steve Jobs。這兩位對我的職業(yè)生涯有重大的影響。如果沒有他們,這本書也就不存在。 最后,我要感謝classroomM.com/objective-c論壇的會員對我的反饋、支持和鼓勵。 1.5 第6版前言 上個版本沒有多少變化。由于Xcode 5的引入,所有的截圖已被更新。我這樣做是為了讓新手也能跟隨當前截圖,不至于在學習之前迷茫!有一些語言細節(jié)的增加,也已反映在此版中。 Stephen G.Kochan 2013年10月
你還可能感興趣
我要評論
|