關(guān)于我們
書單推薦
新書推薦
|
Objective-C程序設計案例教程
Objective-C是一門面向?qū)ο蟮木幊陶Z言, 是用于iOS開發(fā)的主流語言。本書作為iOS開發(fā)的入門教材, 站在初學者的校對, 以形象的比喻、豐富的案例、通俗易懂的語言, 全面要講解了Objective-C的相關(guān)知識, 包括Objective-C開發(fā)工具的安裝使用, 基本語法、面向?qū)ο笏枷搿⑻赜姓Z法、內(nèi)存管理, ARC機制、分類、延展、Block代碼塊、協(xié)議、Foundation框架。
本書是經(jīng)典的Objective-C教材,在《Objective-C入門教程》的基礎(chǔ)上進行了全面升級,不僅細化補充了很多新知識,而且針對每章都設計了階段案例和配套練習,幫助讀者鞏固知識,提升學習效果。
特色一:化繁為簡,降低初學者入門難度
在講解知識點時,采用需求引入的方式,圖文并茂地將一些復雜的知識點簡化,從而降低初學者的入門難度。
特色二:目標清晰,幫助學習者掌握核心知識
在設定學習目標時,反復斟酌每個知識點的重要程度,非常清晰地描述知識點要求的掌握程度。
特色三:內(nèi)容全面,開闊程序視野范圍
全面涵蓋iOS開發(fā)過程中Objective-C的編程思想和基本語法,開闊讀者視野,讓讀者在學習后續(xù)iOS開發(fā)過程中熟練使用Objective-C語法。
特色四:免費提供豐富的配套資源
附有配套視頻、源代碼、習題、教學課件等資源,而且為了幫助初學者更好地學習本教材中的內(nèi)容,還提供了在線答疑。
特色二:配套資源豐富
本書附有配套視頻、源代碼、習題、教學課件等資源。同時,為了幫助初學者及時地解決學習過程中遇到的問題,黑馬程序員還專門提供了免費的在線答疑平臺。
傳智播客和“黑馬程序員”
江蘇傳智播客教育科技股份有限公司(簡稱傳智播客)是一家專門致力于培養(yǎng)高素質(zhì)軟件開發(fā)人才的科技公司,“黑馬程序員”是傳智播客旗下的高端IT教育品牌。
“黑馬程序員”的學員多為大學畢業(yè)后想從事IT行業(yè),但各方面條件還不成熟的年輕人!昂隈R程序員”的學員篩選制度非常嚴格,除包括嚴格的技術(shù)測試、自學能力測試外,還包括性格測試、壓力測試、品德測試等。百里挑一的殘酷篩選制度確保了學員質(zhì)量,降低了企業(yè)的用人風險。
自“黑馬程序員”成立以來,教學研發(fā)團隊一直致力于打造精品課程資源,不斷在產(chǎn)、學、研三個層面創(chuàng)新自己的執(zhí)教理念與教學方針,并集中“黑馬程序員”的優(yōu)勢力量,有針對性地出版了計算機系列教材五十多種,制作了教學視頻數(shù)十套,發(fā)表各類技術(shù)文章數(shù)百篇。
“黑馬程序員”不僅斥資研發(fā)IT系列教材,還為高校師生提供以下配套學習資源與服務。
為大學生提供的配套服務:
1. 專注的輔助學習平臺“博學谷”(http://yx.boxuegu.com),專業(yè)老師在線為學生答疑解惑。
2. 針對高校學生在學習過程中存在的壓力等問題,我們還面向大學生量身打造了“播妞”!安ユぁ辈粌H致力推行快樂學習,還會有定期的助學紅包雨。讀者可添加“播妞”微信/QQ: 208695827。
3. 高校學生也可掃描右方二維碼,加入“播妞”粉絲團,獲取最新學習資源,與“播妞”一起快樂學習。
為IT教師提供的配套服務:
針對高校教學,“黑馬程序員”為IT系列教材精心設計了“教案+授課資源+考試系統(tǒng)+題庫+教學輔助案例”的系列教學資源,高校老師請關(guān)注碼大牛老師微信/QQ: 2011168841,獲取教材配套資源,也可以掃描右方二維碼,加入專為IT教師打造的師資服務平臺——“教學好助手”,獲取“黑馬程序員”最新教師教學輔助資源相關(guān)動態(tài)。
傳智人
2017年1月
ObjectiveC,通常寫作ObjC或OC,較少寫作Objective C或ObjC,它在 C 語言的基礎(chǔ)上進行擴充,是支持面向?qū)ο蟮囊婚T語言。ObjectiveC的流行歸功于iPhone的成功,它可以編寫的應用程序如下:
iOS操作系統(tǒng)
iOS應用程序
Mac OS X操作系統(tǒng)
Mac OS X 上的應用程序
為什么寫本書
2014年,我們出版了一本《ObjectiveC入門教程》,該書站在初學者的角度,以形象的比喻、實用的案例、通俗易懂的語言,詳細講解了ObjectiveC 語言,受到廣大讀者的一致好評。
本書作為《ObjectiveC入門教程》的升級版,秉承之前教材的優(yōu)點,不僅對開發(fā)環(huán)境和開發(fā)工具有所更新,而且在知識內(nèi)容上也有所更新:
新增block代碼塊。作為ObjectiveC最新最強大的工具,本書通過對block代碼塊的定義和使用進行了詳細講解。block是蘋果公司推薦的類型,效率高,可以幫助我們組織獨立的代碼段,并提高復用性和可讀性。
內(nèi)存管理。通過MRC到ARC的轉(zhuǎn)變過程,深刻幫助讀者理解ObjectiveC的內(nèi)存管理機制,輕松搞定任何與內(nèi)存管理相關(guān)的問題。
如何使用本書
本書以全新的OS X 10.11為平臺,以Xcode 8.1為開發(fā)工具,全面介紹了ObjectiveC的基本知識?紤]到本書使用對象的不同,給予以下建議:
課堂教學,建議采用案例驅(qū)動的方式來講授,讓學生在動手完成“案例”的過程中,培養(yǎng)學生分析問題、解決問題的能力,使學生可以直觀、深刻地學會ObjectiveC開發(fā)技能。
建議自主學習者勤思考、勤練習、勤檢測。任何有疑惑的地方都可以向“問答精靈”咨詢,每個知識點對應的案例都要獨立完成,最后通過每章配套的習題進行自我檢測。
本教材共有10章,具體內(nèi)容如下。
第1章首先介紹了ObjectiveC語言的特點、發(fā)展歷史以及未來的趨勢,然后講解了開發(fā)環(huán)境的搭建,包括系統(tǒng)環(huán)境和開發(fā)工具,并帶領(lǐng)大家開發(fā)一個ObjectiveC程序,對程序的代碼及編譯進行講解,最后講解幫助文檔的使用。
第2章講解了ObjectiveC面向?qū)ο蟮母拍,包括類和對象、類的設計與定義、對象的創(chuàng)建和訪問、方法的使用等內(nèi)容,幫助大家學會使用面向?qū)ο蟮木幊趟枷刖帉懞唵蔚某绦。除此之外,本章還介紹self、匿名對象和異常,并通過一個階段案例,綜合考查讀者對項目需求的分析能力以及對面向?qū)ο蠡局R的掌握程度。
前言ObjectiveC程序設計案例教程 第3章主要介紹面向?qū)ο蟮娜筇卣鳌庋b、繼承和多態(tài),介紹訪問修飾符的特點、里氏替換原則以及description方法的原理。通過本章的學習,希望讀者能夠理解并且掌握封裝、繼承和多態(tài)這三個特征,并且可以靈活運用,為后面的學習奠定扎實的基礎(chǔ)。
第4章主要介紹ObjectiveC的特有語法,包括點語法、@property、@synthesize和@property的增強使用,還介紹靜態(tài)類型、動態(tài)類型和構(gòu)造方法的內(nèi)容。希望讀者認真學習本章內(nèi)容,仔細體會ObjectiveC特有語法的特點和用法。
第5章主要介紹內(nèi)存管理(MRC機制)的知識,包括引用計數(shù)器的概念、單個對象和多個對象的內(nèi)存管理,以及@property參數(shù)的使用。大家應該掌握MRC內(nèi)存管理的原理,便于更好地理解ARC機制的知識。
第6章主要介紹內(nèi)存管理(ARC機制)的知識,包括概念、單個對象的內(nèi)存管理、@property參數(shù)、循環(huán)引用,以及ARC和MRC的相互兼容問題。大家應該掌握ARC內(nèi)存管理的原理,及時管理好程序的內(nèi)存。
第7章主要講解分類的相關(guān)知識,包括分類的簡單實用、非正式協(xié)議和延展。希望讀者在以后的學習中能夠區(qū)分分類的不同使用情景,并靈活加以運用。
第8章主要介紹block代碼塊,包括block語法、block的簡化、block內(nèi)部訪問外部變量、block作為函數(shù)的參數(shù)和返回值。block代碼塊這個知識點不難,并且是iOS開發(fā)經(jīng)常用到的知識點,希望讀者好好學習并掌握。
第9章主要講解ObjectiveC中的協(xié)議,包括協(xié)議的聲明、協(xié)議的遵守、協(xié)議的繼承等。雖然協(xié)議的相關(guān)內(nèi)容不多,但使用頻率非常高,希望大家深刻理解協(xié)議的好處,并在后面的開發(fā)中靈活運用。
第10章主要講解Foundation框架中的常見對象及其這些對象的常見操作,包括字符串、數(shù)組、字典、文件操作、日期處理等相關(guān)對象。通過本章的學習,希望讀者獨立使用Foundation框架開發(fā)應用程序。
在學習過程中,讀者一定要親自實踐案例中的代碼。如果不能完全理解書中所講的知識,讀者可以登錄博學谷平臺,通過平臺中的教學視頻進行深入學習。學習完一個知識點后,要及時在博學谷平臺上進行測試,以鞏固學習內(nèi)容。另外,如果讀者在理解知識點的過程中遇到困難,建議不要糾結(jié)于某個小點,可以先往后學習,通常來講,看到后面對知識點的講解或者其他小節(jié)的內(nèi)容后,前面看不懂的知識點一般就能理解了。如果讀者在動手練習的過程中遇到問題,建議多思考,厘清思路,認真分析問題發(fā)生的原因,并在問題解決后多總結(jié)。
致謝
本教材的編寫和整理工作由傳智播客教育科技股份有限公司完成,主要參與人員有呂春林、高美云、王曉娟、劉傳梅、尹橋印、潘星、薛蒙蒙、鄭瑤瑤、齊瑞華、郭敬楠等,全體人員在近一年的編寫過程中付出了很多辛勤的汗水,在此一并表示衷心的感謝。
意見反饋
盡管我們盡了最大的努力,但教材中難免會有不妥之處,歡迎各界專家和讀者朋友來信、來函提出寶貴意見,我們將不勝感激。閱讀本書時,如發(fā)現(xiàn)任何問題或有不認同之處,可以通過電子郵件與我們?nèi)〉寐?lián)系。
黑馬程序員
2017年5月于北京前言ObjectiveC程序設計案例教程
第1章ObjectiveC入門1
1.1ObjectiveC概述1
1.2搭建開發(fā)環(huán)境2
1.2.1開發(fā)環(huán)境要求2
1.2.2系統(tǒng)環(huán)境搭建2
1.2.3Xcode開發(fā)工具搭建3
1.3開發(fā)第一個ObjectiveC程序4
1.3.1使用Xcode開發(fā)ObjectiveC
程序4
1.3.2ObjectiveC程序代碼分析7
1.3.3ObjectiveC源碼、編譯代碼和
可執(zhí)行文件8
1.4幫助文檔的使用9
1.4.1幫助文檔的下載安裝9
1.4.2幫助文檔的使用9
1.5本章小結(jié)12
1.6本章習題12
第2章面向?qū)ο缶幊蹋ㄉ希?3
2.1面向?qū)ο蟾攀?3
2.2類和對象14
2.2.1類和對象之間的關(guān)系14
2.2.2類的設計15
2.2.3類的定義16
2.2.4使用Xcode創(chuàng)建一個類17
2.2.5類的對象的創(chuàng)建22
2.2.6訪問對象的屬性24
2.3方法25
2.3.1方法的聲明實現(xiàn)和調(diào)用25
2.3.2方法實現(xiàn)中直接訪問屬性27目錄ObjectiveC程序設計案例教程2.3.3對象作為方法的參數(shù)28
2.3.4對象作為方法的返回值31
2.4self的使用32
2.4.1在對象方法中使用self32
2.4.2在類方法中使用self35
2.5匿名對象37
2.6異常37
2.7階段案例——猜拳游戲38
2.8本章小結(jié)43
2.9本章習題44
第3章面向?qū)ο缶幊蹋ㄏ拢?6
3.1面向?qū)ο蟮娜筇卣?6
3.2封裝47
3.2.1setter的封裝47
3.2.2getter的封裝49
3.3static關(guān)鍵字50
3.4繼承51
3.4.1繼承的簡單使用51
3.4.2繼承的特點53
3.4.3方法的重寫56
3.4.4super關(guān)鍵字57
3.5訪問修飾符59
3.6里氏替換原則59
3.7多態(tài)60
3.8description方法62
3.9階段案例——計算器63
3.10本章小結(jié)67
3.11本章習題67
第4章ObjectiveC特有語法69
4.1點語法69
4.2@property72
4.3@synthesize73
4.4@property增強75
4.5靜態(tài)類型與動態(tài)類型76
4.6動態(tài)類型檢測78
4.7構(gòu)造方法80
4.7.1構(gòu)造方法概述80
4.7.2重寫init構(gòu)造方法81
4.7.3自定義構(gòu)造方法82
4.8階段案例——購票系統(tǒng)84
4.9本章小結(jié)92
4.10本章習題93
第5章內(nèi)存管理99
5.1內(nèi)存管理概述99
5.1.1引用計數(shù)器99
5.1.2第一個MRC程序101
5.2單個對象的內(nèi)存管理105
5.3多個對象的內(nèi)存管理(setter方法內(nèi)存管理)106
5.3.1setter方法內(nèi)存管理(一)109
5.3.2setter方法內(nèi)存管理(二)111
5.3.3setter方法內(nèi)存管理(三)115
5.4@property參數(shù)概述117
5.4.1@property參數(shù)之a(chǎn)tomic與nonatomic118
5.4.2@property參數(shù)之retain與assign118
5.4.3@property參數(shù)之readwrite與readonly121
5.4.4@property參數(shù)之getter與setter121
5.5自動釋放池126
5.6階段案例——微博(MRC)127
5.7本章小結(jié)133
5.8本章習題133
第6章ARC機制138
6.1ARC機制概述138
6.2ARC機制下單個對象的內(nèi)存管理139
6.3@property中的strong和weak140
6.4ARC機制下的循環(huán)引用141
6.5ARC與MRC的相互兼容145
6.6階段案例——微博(ARC)147
6.7本章小結(jié)152
6.8本章習題153
第7章分類和延展156
7.1分類概述156
7.1.1分類的簡單使用156
7.1.2分類的注意細節(jié)159
7.2非正式協(xié)議161
7.3延展163
7.4本章小結(jié)165
7.5本章習題165
第8章block169
8.1block概述169
8.1.1block語法169
8.1.2block的基本使用170
8.1.3使用typedef簡化復雜的block定義172
8.2block內(nèi)部訪問外部變量173
8.3block作為函數(shù)的參數(shù)174
8.4block作為函數(shù)的返回值176
8.5本章小結(jié)177
8.6本章習題177
第9章協(xié)議182
9.1協(xié)議概述182
9.1.1協(xié)議的基本使用182
9.1.2@required和@optional185
9.2協(xié)議之間的繼承185
9.3協(xié)議的類型限制186
9.4階段案例——給男生找女友187
9.5本章小結(jié)190
9.6本章習題190
第10章Foundation框架194
10.1NSString的基本使用194
10.1.1NSString的創(chuàng)建194
10.1.2NSString最常見的操作195
10.2NSString的其他操作198
10.2.1字符串的讀寫198
10.2.2字符串的比較203
10.2.3字符串的開始和結(jié)束判斷204
10.2.4字符串的搜索205
10.2.5字符串的截取207
10.2.6字符串的替換208
10.2.7字符串的類型轉(zhuǎn)換209
10.3NSMutableString210
10.3.1NSMutableString概述210
10.3.2NSMutableString的使用210
10.4NSArray212
10.4.1NSArray數(shù)組的創(chuàng)建212
10.4.2NSArray數(shù)組的基本使用213
10.4.3NSArray數(shù)組的遍歷215
10.5NSMutableArray的使用217
10.6NSDictionany219
10.6.1NSDictionary概述219
10.6.2NSDictionary字典的創(chuàng)建219
10.6.3NSDictionary的使用220
10.6.4NSDictionary字典的遍歷221
10.7NSMutableDictionary的使用222
10.8NSFileManager224
10.8.1使用NSFileManager實現(xiàn)判斷操作224
10.8.2使用NSFileManager獲取信息226
10.8.3使用NSFileManager創(chuàng)建文件或文件夾229
10.9Foudation框架的結(jié)構(gòu)體232
10.9.1CGPoint232
10.9.2CGSize233
10.9.3CGRect234
10.10NSValue235
10.11日期處理236
10.11.1字符串與時間的相互轉(zhuǎn)換236
10.11.2日期計算237
10.11.3得到日期的各個部分239
10.12階段案例——通訊錄240
10.13本章小結(jié)248
10.14本章習題248
第5章內(nèi)存管理學習目標
了解管理內(nèi)存的概念,可以簡述內(nèi)存管理的重要性。
通過分析引用計數(shù)器的工作原理,學會對單個或者多個對象進行內(nèi)存管理,避免程序開發(fā)中出現(xiàn)內(nèi)存泄漏。
掌握@property參數(shù)的使用場景,可以準確為不同類型的屬性設定參數(shù)。
理解自動釋放池的作用,可以闡述自動釋放池何時被創(chuàng)建和銷毀。當OC程序運行時,會在手機的內(nèi)存中產(chǎn)生很多臨時的數(shù)據(jù)(變量,對象等),系統(tǒng)會將它們歸納分類,然后分配到內(nèi)存的不同區(qū)域。在內(nèi)存中有五大區(qū)域,具體如下:
。1) 棧區(qū)域: 保存局部變量。當局部變量的作用域被執(zhí)行完畢以后,這個局部變量就會被系統(tǒng)立即回收。
(2) 堆區(qū)域: 保存OC對象。使用C函數(shù)申請的動態(tài)空間都是分配在堆里面的。
。3) BSS段: 保存未初始化的全部變量和靜態(tài)變量。一旦初始化就會被回收,并且轉(zhuǎn)入到數(shù)據(jù)段中。
(4) 數(shù)據(jù)段: 保存已經(jīng)初始化的全局變量和靜態(tài)變量。直到程序結(jié)束時才會被回收。
。5) 代碼段: 程序結(jié)束時,系統(tǒng)會自動回收存儲在代碼段中的數(shù)據(jù)。
由于移動設備的內(nèi)存是有限的,一旦占用量過大,勢必造成卡頓或者閃退的情況。其中,棧區(qū)、BSS段、數(shù)據(jù)段和代碼段存放的數(shù)據(jù)是由系統(tǒng)負責回收的,而堆中的對象系統(tǒng)不能自動回收,所以內(nèi)存管理的范圍是存放在堆中的OC對象。
為了讓應用程序的內(nèi)存消耗到最低,需要及時地清理無用的對象,但是需要確保清除的不是正在使用的對象。ObjectiveC中提供了MRC(Mannul Reference Counting,手動引用計數(shù))和ARC(Automatic Reference Counting,自動引用計數(shù))兩種機制對內(nèi)存中的對象進行管理,本章主要介紹MRC內(nèi)存管理的相關(guān)知識。
5.1內(nèi)存管理概述
當有人在使用某個對象時,它一定不能被回收,當沒有人使用某個對象時,它才能被回收。這時需要有個計數(shù)的東西,隨時統(tǒng)計此時使用對象的數(shù)量,為此提出了引用計數(shù)器的概念,本節(jié)將針對引用計數(shù)器進行詳細介紹。
5.1.1引用計數(shù)器
為了記錄每個對象被使用的情況,ObjectiveC為每個對象設置了一個內(nèi)部計數(shù)器,稱為引用計數(shù)器。當對象被創(chuàng)建時,讓引用計數(shù)的值為1,每次對象被引用時,引用計數(shù)增加1,每次對象減少一次引用時,引用計數(shù)減1,直到引用計數(shù)器的值為0時,直接釋放對象占用的內(nèi)存。接下來,以現(xiàn)實中辦公室使用電燈的例子,說明引用計數(shù)的原理,如圖51所示。
圖51引用計數(shù)原理示意圖
圖51介紹了引用計數(shù)的原理。假設有一個辦公室(內(nèi)存),有個人打開了辦公室的燈(對象),此時使用電燈照明的人數(shù)(引用計數(shù))為1;有人進入辦公室,引用計數(shù)就增加1;有人離開辦公室,引用計數(shù)就減少1;當最后一個人離開時,此時使用電燈照明的人數(shù)為0,需要關(guān)閉電燈,辦公室停止使用。
第5章內(nèi)存管理ObjectiveC程序設計案例教程知道了引用計數(shù)器的原理后,接著來操作引用計數(shù)器。在MRC(手動引用計數(shù))機制中,提供了手動管理內(nèi)存的方法,具體如下。
1. retainCount屬性
每個對象內(nèi)部都有retainCount屬性,隸屬于unsigned類型,占用4個字節(jié)。這就是引用計數(shù)器,用于記錄當前對象被使用的次數(shù)。
2. retain方法
當對象發(fā)送一條retain消息(調(diào)用retain方法)時,該對象的引用計數(shù)器的值加1。例如,在辦公室照明的例子中,有人進入辦公室,使用電燈的人數(shù)增加1。
3. release方法
當對象發(fā)送一條release消息(調(diào)用release方法)時,該對象的引用計數(shù)器的值減1。例如,有人離開辦公室,使用電燈照明的人數(shù)減少1。
4. dealloc方法
當對象的引用計數(shù)器的值變成0時,其占用的內(nèi)存會被系統(tǒng)立即回收,同時系統(tǒng)會發(fā)送一條dealloc消息。例如,最后一個人離開辦公室,關(guān)閉電燈,辦公室不再投入使用。
多學一招: 內(nèi)存管理分類——MRC和ARC機制
。1) MRC(手動引用計數(shù))
當多一個人使用對象時,要求程序員手動地發(fā)送retain消息;當少一個人使用對象時,要求程序員手動地發(fā)送release消息。
。2) ARC(自動引用計數(shù))
當多一個人使用對象時,系統(tǒng)會自動在合適的位置發(fā)送retain消息;當少一個人使用對象時,系統(tǒng)會自動在合適的位置發(fā)送release消息。
5.1.2第一個MRC程序
自Xcode 4.2開始支持ARC模式,默認不再使用MRC模式。假設要體驗MRC模式開發(fā),前提是需要在Xcode中關(guān)閉自動引用計數(shù),具體步驟如下。
(1) 創(chuàng)建一個命令行工程,在打開的導航面板中,單擊左側(cè)的根目錄,選擇Build Settings→All,如圖52所示。
……
你還可能感興趣
我要評論
|