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