天天看點

《iOS應用開發攻略》試讀樣章

[size=large][b]内容簡介:[/b][/size]

本書涵蓋了應用開發及建構優雅解決方案的必備知識,包括編寫通用的啟動畫面和嵌入式Web浏覽器;建構複雜表視圖;使應用或遊戲活靈活現的填充、變換和動畫;通過手勢、轉換和自定義控件改善UI;用基本技術知識避免代碼重複,解決複雜問題(如上傳大檔案到Web伺服器)等。

[img]http://www.ituring.com.cn/bookcover/840.416.jpg[/img]

[size=large][b]作者簡介:[/b][/size]

[b]Matt Drance[/b]

前蘋果公司布道師。在蘋果公司工作了8年,然後創立了一家iOS開發與咨詢公司Bookhouse Software。他還為Pragmatic Studio教育訓練iOS開發者,在Apple Outsider(appleoutsider.com)上分享對行業的見解。除了編碼、寫作、教學以及履行超級奶爸的義務之外,Matt還喜歡在北加州滑雪和賽車。

[b]Paul Warren[/b]

圖形系統專家程式員。上世紀80年代初,Paul Warren就愛上了計算機圖形學,并且喜歡在他的Commodore 64上程式設計。經過20年的彙編語言程式設計生涯,他又找回了初戀:開發有趣的圖形系統。Paul的iOS開發與咨詢公司Primitive Dog專門制作二維動畫和定制控件。除了癡迷于讓各種東西在螢幕上翻轉飛舞,他其他所有時間都用來陪伴兩個可愛的女兒。

[size=large][b]譯者簡介:[/b][/size]

[b]劉威 [/b]

2001年畢業于中國科學院研究所學生院。熱愛計算機科學,喜歡程式設計,尤其喜歡寫程式解決實際問題。從2000年起從事軟體開發工作,最近幾年一直專注于手機軟體開發,目前從事Android和iOS軟體開發。曾翻譯出版《Objective-C程式設計之道:iOS設計模式解析》一書。新浪微網誌:@劉威-LiuWei。

[size=large][b]本書贊譽:[/b][/size]

如果隻能選擇一位老師學習最好的iOS開發方法,我會選擇Matt Drance。本書也沒讓我失望,因為我立刻就用上了幾招。我希望盡快用到更多招數,尤其是Paul的好玩的圖形與動畫技法!

——Brent Simmons,NetNewsWire的開發人員

本書對一系列“他們是怎麼做的?”問題做了很好的解答。對于想在自己的蘋果應用中點綴亮點的人來說,這是一本必讀的書。

——Justin Williams,Second Gear主程式員

無論對初學者還是有經驗的開發人員來說,這都是一本很棒的書。書中充滿了極為有用的最新示例程式,示範了如何往項目中添加專業級的功能,而且講解精彩,代碼給力。

——Michael Hay,Black Pixel公司進階開發人員

強烈推薦這本書!書中介紹的很多技巧與竅門别處都難以找到。我甯願從書架上(或iBooks中)取出一本書,來研習曾經看到過的那段代碼,書上的代碼是不會突然消失的;而去網上找的話,說不定早被網站删掉了。這本書肯定是我要從書架上取出的一本。

——Marcus S. Zarra,Zarra Studios公司所有人

即使你在自己的蘋果應用中隻用到了書中的一招,那麼買這本書也值了。我很快就發現書中馬上能用的招數簡直太多了。如果你靠寫iOS應用來掙錢,而且惜時如金,那麼時刻要把書放在觸手可及之處,否則你會抓狂的!

——Mike Clark,Clarkware創始人

[size=large][b]引言:[/b][/size]

作為程式員,我們的目标是解決問題。問題有時困難有時容易,有時又充滿樂趣。也許它們算不上我們常說的“問題”,但是需要我們來找到解決辦法。

作為作者,我們的目标是幫助讀者更好、更快地解決問題(最好是先保證好,然後再保證快)。于是我們決定寫這本攻略書,重點讨論一組我們要直接面對的具體任務與問題,而不是泛泛地讨論程式設計問題。

這不是說這本書不會教大家東西。攻略書的好處在于,能針對讀者不易自己找到辦法的問題提供可信賴的解決方案。缺點在于,它會讓你忍不住把解決方案直接複制粘貼到自己的項目中,而不去花時間了解這些解決方案。能減少編碼量進而節省時間總是件好事,但是思考并弄懂時間是如何節省下來的,今後怎樣才能節省更多時間,同樣非常重要。

如果你熟悉iOS SDK,打算提高app的品質與效率,就請閱讀本書。本書不會教你如何編寫app,但我們希望幫助你把app開發得更好。如果你是一名進階開發人員,那麼可能會發現采用書中的某些複雜技巧能幫你節省時間,避免麻煩。

大部分攻略都是本着保證最大可複用性的原則來編寫的。我們并不隻是示範可以解決問題的一種技巧或一段代碼。相反,我們着眼于建立讀者可以內建到自己的iPad或iPhone app中的解決方案。有些方案可能無需改動就能應用到你的項目中,但你盡可以把本書當做一般的“烹饪書”來用。按照食譜烹調時,我們可以根據喜好及需要增減配料。開發自己的app和項目時也是如此:你盡可以擴充或修改本書中各攻略所附的項目,使之滿足自己的特定需要。

書中的攻略能從頭到尾完整地教你如何完成任務,但是我們希望這些攻略可以激發你去思考在什麼情況下、為什麼要選擇某種方案。通常會有多種選擇,尤其是在像Cocoa這樣的環境下。有多種選擇,就會有多種做法。為保持一緻,我們對本書中的某些模式與做法預先做了一些約定。這些技巧中有些你可能比較熟悉,有些技巧的用法你可能沒有想到,有些對你來說可能是全新的技巧。不管怎樣,我們先對這些約定做個說明,以免讀者覺得意外。

格式與文法

本書中有些代碼片段為了排版不得不采用特殊的格式。Objective-C這樣啰嗦的語言在有字數限制的情況下無法保證效果,是以有時某些代碼會顯得很特别。讀者可能會遇到簡短的方法名或變量名、看起來過多的臨時變量,還有奇怪的換行。我們力圖保留Cocoa慣例的“精神”,但有幾處為了排版隻好妥協。如果編碼風格偶爾突然改變,請不要奇怪。

範疇

相當一部分攻略為了完成任務而使用了對蘋果公司标準類的範疇。範疇是Objective-C程式設計語言的一項異乎強大的功能,并常讓新手Cocoa程式員望而卻步。範疇也能夠輕易破壞命名空間,在複雜的類層次結構中引入或屏蔽令人意想不到的行為。我們不必害怕它,但要重視它。考慮範疇的時候,需要注意以下幾點。

想一想是否子類或者新的類會更加合适。如蘋果公司的《Objective-C程式設計語言》手冊中所述,“不能用範疇替代子類”。

擴充不歸自己掌管的類(比如UIApplication)時,一定要給範疇方法加字首,以避免與将來API的名字發生沖突。本書中,新的範疇方法都使用字首prp_。

決不能在範疇中重載已有的方法,比如-drawRect。這樣會屏蔽源類中的實作,進而破壞繼承樹。

合成的執行個體變量

我們很少在本書的頭檔案或例子中聲明執行個體變量。我們全部采用Objective-C 2.0的屬性,利用運作庫先進的執行個體變量合成功能來聲明類存儲。這樣做能減少輸入與閱讀的代碼量,讓我們可以專注于攻略本身。我們在本書攻略35會作進一步解釋。

私有類擴充

私有類擴充是Objective-C的另一項比較新的功能,在本書中經常使用。私有擴充可以減少頭檔案中的幹擾而提高可讀性,而且為代碼的利用者或維護者提供了更為清晰的描述。在攻略35中,我們向不熟悉私有類擴充或執行個體變量合成的讀者介紹了這兩種技術。

-dealloc中的清理工作

在-dealloc中,除了釋放所有相關執行個體變量之外,我們的例子還把它們設為nil。這一做法在Cocoa程式員中争議較大,争論的雙方各有道理。本書無意參與這場争論:我們把執行個體變量設為nil,但讀者不必非得這樣做。如果讀者不喜歡-dealloc中的nil,大可不必寫到自己的代碼中。

塊與委托

塊是在Mac OS X雪豹與iOS 4.0中新添加到C和Objective-C中的一項功能。因為這項功能還比較新,是以對于何時使用塊、何時使用委托的争論還在繼續中。本書中我們在覺得合适的時候兩者同時使用。讀者可以随意向使用委托的攻略中添加塊,或者反過來也行。我們的最終目的是幫助讀者找到最簡單、最自然的解決方案。

最重要的是,本書旨在減少讀者代碼的複雜性與重複。不求速戰速決地解決一個問題,而是選擇長期有效的解決方案。我們希望本書的這些思想會在iOS開發道路上對你有所幫助。

網上資源

本書有自己的網頁,http://pragprog.com/titles/cdirec。在這裡讀者可以找到有關本書的更多資訊,并通過以下方式進行參與:

通路書中所有示例程式的完整源代碼;

參加讨論組,與其他讀者、iOS開發者和作者進行交流;

報告勘誤,包括對内容的建議和送出排印錯誤,幫助改進本書。

[size=large][b]前言:[/b][/size]

對開發者來說,iOS是個神奇的平台。它那不可思議的觸摸屏和互動模式,為應用程式打開了全新的篇章。已經有卓越的開發人員開發出了幾年前還無法想象的軟體。iPhone、iPod Touch和iPad的便攜性意味着我們可以将其随身攜帶,而且其不錯的電池待機時間意味着我們可以持續使用。顯而易見,iOS指明了未來的方向(我隻能對我那台2007年的MacBook Pro裝的雪豹作業系統說聲抱歉,我開發軟體及處理照片時經常會用到它)。顯然計算技術已經改變,而且不會再回到2005年的方式。

這令人興奮。誰不想為這些神奇的裝置開發軟體呢?

另一方面,實際上我們開始學習如何為iOS及其基于觸控的架構開發軟體才隻有短短的幾年時間。當然,讀者中有些人一直從事Mac OS X的軟體開發,相比大多數從其他平台轉而開發iOS的開發人員,你們已領先一步。但是,不要誤會。不管你背景如何,在編寫iOS的程式時,我們都是處于陌生的領域。盡管我在十幾年前就開始編寫Cocoa應用程式,并且寫了很多有關Mac OS X開發的書和文章,但我在iOS的開發中仍然遇到不少頭疼的事,需要在Xcode中埋頭查閱其文檔。需要弄懂的東西太多,包括如何建立完美的啟動畫面,如何最有效地用表格與滾動視圖實作我們的目标,如何通路新興的社交應用所使用的衆多網絡服務,以及如何利用iOS的運作庫而不是與之對抗。

很幸運,我們不必自己解決所有這些問題。Matt和Paul(本書的作者)已經在這本攻略書中收集了一系列執行個體,并且收錄了最新的iOS軟體開發的最佳做法。結果就是為我們貢獻了一系列了不起的、針對目标問題的具體解決方案,我們可以在需要時盡情查閱。

但不止如此。盡管本書由一些完全自成體系的獨立章節組成,但讀完全書可以讓我們對Matt和Paul如何施展其技藝大有領悟。當我閱讀本書初稿時,那種感覺就像在觀賞我喜愛的廚師現場烹饪美食,我可以向他們學習如何處理手頭的工作,甚至包括如何處理我本以為自己已經掌握的簡單任務。

是以,且搬把椅子坐下來,跟我最喜愛的兩位iOS開發者學上一手!然後,放手去開發幾年前你還可望不可及的那些軟體吧!

James Duncan Davidson

2011年4月

[size=large][b]目錄[/b][/size]

目  錄

第1章  UI攻略  1

攻略1  添加基本的啟動畫面切換  1

攻略2  讓啟動畫面的切換更有吸引力  7

攻略3  為定制的通知視圖添加動畫  12

攻略4  建立可重用的開關按鈕  15

攻略5  形成帶彩色紋理的圓角視圖  19

攻略6  組裝可重用的網頁視圖  22

攻略7  定制滑動條與進度條  25

攻略8  打造自己的手勢識别器  27

攻略9  建立獨立的警告視圖  30

攻略10  表示帶屬性字元串的标簽  35

攻略11  滾動無止境的專輯封面牆  39

攻略12  從專輯封面牆播放樂曲  42

攻略13  享受自動滾動的文本視圖  47

攻略14  建立個性化的數值控件  50

第2章  表格與滾動視圖攻略  56

攻略15  簡化表格單元格的生成  56

攻略16  在Nib中使用智能表格單元格  59

攻略17  定位單元格子視圖  63

攻略18  組織複雜的表格視圖  65

攻略19  生成雙色表格視圖  70

攻略20  給表格視圖添加邊框陰影  73

攻略21  在滾動視圖中使用靜态内容  79

攻略22  建立旋轉翻頁的滾動視圖  82

第3章  繪圖攻略  86

攻略23  繪制梯度填充的貝塞爾軌迹  87

攻略24  建立多個動畫的動态圖像  91

攻略25  建立組合與變換的視圖  93

攻略26  對梯度圖層實施動畫  95

攻略27  重新打造陰影  98

攻略28  顯示帶動畫的視圖  100

攻略29  構造簡單的發射器  102

攻略30  翻卷頁面顯示新視圖  106

第4章  網絡攻略  111

攻略31  改進網絡活動訓示器  111

攻略32  簡化Web服務的連接配接  113

攻略33  格式化簡單的HTTP  POST  116

攻略34  通過HTTP上傳檔案  120

第5章  運作庫攻略  127

攻略35  使用新式的Objective-C類設計  127

攻略36  生成智能調試輸出  130

攻略37  設計智能化的User  Defaults通路  133

攻略38  掃描與周遊視圖層次結構  136

攻略39  初始化基本資料模型  142

攻略40  在範疇中存儲資料  146