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