最近在看Effective Objective-C 2.0 這本書,里面有52個鮮為人知和容易被忽略的特性與陷阱,包含了大量實用范例的代碼,為編寫易于理解,便于維護,易于擴展和高效的Objective-C應(yīng)用提供了解決方案
隨著我看書的速度來跟新我的文章,都是自己的理解,如果有理解不到位的地方,大家要多多指出了,一起學(xué)習(xí),懂得分享,才能進步.
第一條 了解起源
Objective-C是利用runtime機制檢查對象類型,接受消息之后執(zhí)行什么是有編譯器和運行期的環(huán)境決定的.通常學(xué)習(xí)OC都會學(xué)習(xí)C語言的核心理念,包括指針,內(nèi)存管理等等.第一條就先說這么多.
第二條 類的頭文件中盡量少引入其他頭文件
在引入類的頭文件的時候,用#import引入,這個類里需要其他類的屬性的時候就要引入該類的頭文件.然后定義引入頭文件的屬性.但是有時候我們根本不需要知道這個類的全部細節(jié),只需要知道有這么個類就行.這樣就可以選著@class加上類名來實現(xiàn),這樣做叫做向前聲明.也可以避免兩個類互相引用的問題.這么做可以降低類之間的耦合.
筆者推薦在項目中如果要用到協(xié)議去做一些事情,不妨把協(xié)議寫在一個單獨的.h里面,這樣做在引入?yún)f(xié)議的時候就可以引入頭文件就ok了,簡單明了.還有在寫項目的時候,有許多需要引入的頭文件,一些都要引入的文件,最好的方式就是寫在PCH.關(guān)于PCH怎么創(chuàng)建,在我的其他文章中有提到,推薦去看一看.
第三章 多用字面量,少用等價方法
這里簡單的舉個例子吧
便利構(gòu)造器方法創(chuàng)建
NSNumber*num = [NSNumbernumberWithInt:1];
字面量:
NSNumber*num =@1;
可以清楚的看到,字面量更加精簡,當(dāng)然不僅僅是這樣.這里提出一點是在NSDictionary,NSArray字面量創(chuàng)建的話如果數(shù)據(jù)中有nil會報錯.要注意.
對了,在書中還有一點是說要通過下標來對數(shù)組進行訪問或者是字典中的key值.這么做的意義也是是代碼簡潔.易于理解.
第四章 多用類型常量,少用#define預(yù)處理指令
筆者在做開發(fā)的時候,用#define去定義一個字符串會定義一個域名,方便修改,然后在開發(fā)過程中,如果一直用#define來定義的情況,預(yù)處理會把程序中所有的宏做替換,那么引入這個.h頭文件的所有宏都會被替換掉.書中推薦使用
static const 名字 = 變量 當(dāng)然這里有對命名的規(guī)范問題.之后會介紹
那么問題來了,我們要在什么地方去定義常量呢.如果不想公開這個常量,可以再實現(xiàn)文件中(當(dāng)然是使用常量的實現(xiàn)文件中).其中之一如果要修改變量會報錯.在需要的時候使用時做好的.如果想公開這個常量,可以放在全局符號表(頭文件中)中,方式有所不同,
extern NSSting *const 變量名
extern關(guān)鍵字在頭文件中,編譯器就會知道這個是常量了.
總而言之,筆者認為這個說的意思就是使用預(yù)處理指令的時候,會在程序的任何地方修改常量,這樣做的后果就是常量在每個地方的值不一致.而且不包含類型信息.但是用類型常量就確保常量的值一致是一定的.
第五章 多用枚舉去做一些標識
枚舉類型是在開發(fā)中經(jīng)常用到的.大概要注意著幾點.
1,用枚舉類型定義的名字要清晰易懂.
2,可以通過按位查找枚舉類型
3,用底層數(shù)據(jù)類型定義枚舉,
4,在switch語句中實現(xiàn)處理枚舉類型的時候不要實現(xiàn)default分支,如果加入新枚舉,編譯器會提示switch語句未處理所有類型
今天就這么多了..書還在繼續(xù)看,寫出來也是加深印象的過程.有什么理解不到位的地方,希望看到文章的童鞋們能夠指正一下.