iOS系統(tǒng)OC經(jīng)典之作解讀
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
最近在重溫這本OC經(jīng)典之作《Effective Objective-C 2.0編寫(xiě)高質(zhì)量iOS與OS X代碼的52個(gè)有效方法》,這篇文章算是重溫之后的產(chǎn)物吧,讀完這篇文章你將快速讀完這本書(shū),由于個(gè)人能力有限,難免有一些遺漏或者錯(cuò)誤,請(qǐng)各位看官不吝賜教!謝謝!同時(shí)如果有任何問(wèn)題也可以在下方留言,歡迎一起交流進(jìn)步!另外由于篇幅原因,書(shū)中一些基礎(chǔ)知識(shí)的介紹文中就省略掉了。
目錄
上面就是這本書(shū)的目錄,可以點(diǎn)擊這里下載PDF版,原版英文版PDF我也有存~
第一章:熟悉Objective-C
第一條:了解Objective-C語(yǔ)言的起源
Objective-C從Smalltalk語(yǔ)言是從Smalltalk語(yǔ)言演化而來(lái),
Smalltalk是消息語(yǔ)言的鼻祖。
Objective-C是C語(yǔ)言的超集,在C語(yǔ)言基礎(chǔ)上添加了面向?qū)ο蟮忍匦?,可能一開(kāi)始接觸時(shí)你會(huì)覺(jué)得語(yǔ)法有點(diǎn)奇怪,那是因?yàn)镺bjective-C使用了動(dòng)態(tài)綁定的消息結(jié)構(gòu),而Java,C++等等語(yǔ)言使用的是函數(shù)調(diào)用。
消息結(jié)構(gòu)與函數(shù)調(diào)用的關(guān)鍵區(qū)別在于:函數(shù)調(diào)用的語(yǔ)言,在編譯階段由編譯器生成一些虛方法表,在運(yùn)行時(shí)從這個(gè)表找到所要執(zhí)行的方法去執(zhí)行。而使用了動(dòng)態(tài)綁定的消息結(jié)構(gòu)在運(yùn)行時(shí)接到一條消息,接下來(lái)要執(zhí)行什么代碼是運(yùn)行期決定的,而不是編譯器。
第二條: 在類的文件中盡量少引用其他頭文件
如果需要引用一個(gè)類文件時(shí),只是需要使用類名,不需要知道其中細(xì)節(jié),可以用@class xx.h,這樣做的好處會(huì)減少一定的編譯時(shí)間。如果是用的#import全部導(dǎo)入的話,會(huì)出現(xiàn)a.h import了b.h,當(dāng)c.h 又import a.h時(shí),把b.h也都導(dǎo)入了,如果只是用到類名,真的比較浪費(fèi),也不夠優(yōu)雅
有時(shí)候無(wú)法使用@class向前聲明,比如某個(gè)類要遵循一項(xiàng)協(xié)議,這個(gè)協(xié)議在另外一個(gè)類中聲明的,可以將協(xié)議這部分單獨(dú)放在一個(gè)頭文件,或者放在分類當(dāng)中,以降低引用成本。
第三條:多用字面量語(yǔ)法,少用與之等價(jià)的方法
1.多使用字面量語(yǔ)法來(lái)創(chuàng)建字符串,數(shù)組,字典等。
傳統(tǒng)創(chuàng)建數(shù)組方法:
1
2
3
4 NSArray *languages = [NSArray arrayWithObjects:@ “PHP” , @ “Objective-C” , someObject, @ “Swift” , @ “Python” , nil];
NSString *Swift = [languages objectAtIndex:2];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@ “key” , @ “value” , nil];
NSString *value = [languages objectForKey:@ “key” ];
字面量:
1
2
3
4 NSArray *languages = @[@ “PHP” , @ “Objective-C” , someObject, @ “Swift” , @ “Python” ];
NSString *Swift = languages[2];
NSDictionary *dict = @{@ “key” : @ “value” };
NSString *value = languages[@ “key” ];
這樣做的好處:使代碼更簡(jiǎn)潔,易讀,也會(huì)避免nil問(wèn)題。比如languages數(shù)據(jù)中 someObject 如果為nil時(shí),字面量語(yǔ)法就會(huì)拋出異常,而使用傳統(tǒng)方法創(chuàng)建的languages數(shù)組值確是@[@“PHP”, @“Objective-C”];因?yàn)樽置媪空Z(yǔ)法其實(shí)是一種語(yǔ)法糖,效果是先創(chuàng)建了一個(gè)數(shù)組,然后再把括號(hào)中的對(duì)象都加到數(shù)組中來(lái)。
不過(guò)字面量語(yǔ)法有一個(gè)小缺點(diǎn)就是創(chuàng)建的數(shù)組,字符串等等對(duì)象都是不可變的,如果想要可變的對(duì)象需要自己多執(zhí)行一步mutableCopy,例如
1 NSMutableArray *languages = [@[@ “PHP” , @ “Objective-C” , @ “Swift” , @ “Python” ] mutableCopy];
第四條:多用類型常量,少用#define預(yù)處理指令
第4條第5條看這里
第五條:多用枚舉表示狀態(tài)、選項(xiàng)、狀態(tài)碼
第4條第5條看這里
第二章:對(duì)象、消息、運(yùn)行期
第六條:理解“屬性”這一概念
這一條講的是屬性的基本概念,以及屬性的各種修飾符,這些就不多啰嗦了,這里強(qiáng)調(diào)一下:
定義對(duì)外開(kāi)放的屬性時(shí)候盡量做到暴露權(quán)限最小化,不希望被修改的屬性要加上readonly。
atomic 并不能保證多線程安全,例如一個(gè)線程連續(xù)多次讀取某個(gè)屬性的值,而同時(shí)還有別的線程在修改這個(gè)屬性值得時(shí)候,也還是一樣會(huì)讀到不同的值。atomic 的原理只是在 setter and getter 方法中加了一個(gè)@synchronized(self),所以iOS開(kāi)發(fā)中屬性都要聲明為nonatomic,因?yàn)閍tomic嚴(yán)重影響了性能,但是在Mac OSX上開(kāi)發(fā)卻通常不存在這個(gè)性能問(wèn)題
說(shuō)一下下面的哪個(gè)屬性聲明有問(wèn)題
1
2
3
4 @property (nonatomic, strong) NSArray *arrayOfStrong;
@property (nonatomic, copy) NSArray *arrayOfCopy;
@property (nonatomic, strong) NSMutableArray *mutableArrayOfStrong;
@property (nonatomic, copy) NSMutableArray *mutableArrayOfCopy;
具體運(yùn)行示例點(diǎn)擊查看
答案是正常應(yīng)該這樣聲明
1
2 @property (nonatomic, copy) NSArray *arrayOfCopy;
@property (nonatomic, strong) NSMutableArray *mutableArrayOfStrong;
第七條:在對(duì)象內(nèi)部盡量直接訪問(wèn)實(shí)例變量
在類內(nèi)讀取屬性的數(shù)據(jù)時(shí),應(yīng)該通過(guò)直接實(shí)例變量來(lái)讀,這樣不經(jīng)過(guò)Objecit-C的方法派發(fā),編譯器編譯后的代碼結(jié)果是直接訪問(wèn)存實(shí)例變量的那塊內(nèi)存中的值,而不會(huì)生成走方法派發(fā)的代碼,這樣的速度會(huì)更快。
給屬性寫(xiě)入數(shù)據(jù)時(shí),應(yīng)該通過(guò)屬性的方式來(lái)寫(xiě)入,這樣會(huì)調(diào)用setter 方法。但是在某種情況下初始化方法以及dealloc方法中,總是應(yīng)該直接通過(guò)實(shí)例變量來(lái)讀寫(xiě)數(shù)據(jù),這樣做是為了避免子類復(fù)寫(xiě)了setter方法造成的異常。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
iOS系統(tǒng)OC經(jīng)典之作解讀下載
相關(guān)電子資料下載
- iOS17.1可能明天發(fā)布,iOS17.1主要修復(fù)哪些問(wèn)題? 377
- 華為全新鴻蒙蓄勢(shì)待發(fā) 僅支持鴻蒙內(nèi)核和鴻蒙系統(tǒng)應(yīng)用 719
- 蘋(píng)果手機(jī)系統(tǒng)iOS 17遭用戶質(zhì)疑 731
- iPhone12輻射超標(biāo)?蘋(píng)果推送iOS 17.1解決此事 750
- 傳華為囤積零部件 目標(biāo)明年智能手機(jī)出貨7000萬(wàn)部;消息稱 MiOS 僅限國(guó)內(nèi),小米 28208
- 蘋(píng)果推送iOS17.0.3,解決iPhone15Pro系列存在機(jī)身過(guò)熱 216
- Testin云測(cè)兼容和真機(jī)服務(wù)平臺(tái)中上線iPhone 15系列手機(jī) 208
- 利爾達(dá)推出搭載HooRiiOS的Matter模組 145
- 運(yùn)放參數(shù)解析:輸入偏置電流(Ibias)和失調(diào)電流(Ios) 128
- 昆侖太科發(fā)布支持國(guó)產(chǎn)飛騰騰銳D2000芯片的開(kāi)源BIOS固件版本 448