編寫高質(zhì)量代碼,將bug率降到最低(近期總結(jié))

在類的頭文件中盡量少引用其他頭文件

1."向前聲明"

1

2

3

在類的.h中

@class類的名字

在類的.m中?添加頭文件

在類的.h中

@class類的名字

在類的.m中?添加頭文件

2.說明:

將引入頭文件的時機盡量延后,只在需要的時候才引入,這樣就可以減少類的使用者所需引入的頭文件數(shù)量,減少編譯時間

向前聲明也解決了兩個類互相引用的問題和類之間的耦合

有時候無法使用向前聲明,比如要聲明某個類遵循一項協(xié)議.這種情況下,盡量把 "該類遵循某協(xié)議" 的這條聲明移至 ''class-continuation分類" 中.如果不行的話,就把協(xié)議單獨放在一個頭文件中,然后將其引入.

多用字面量語法,少用與之等價的方法

1.字面量的寫法

1

2

3

4

5

6

7

8

9

10

11

//整數(shù)

NSNumber?*intNumber?=?@1;

//數(shù)組

NSArray?*animals?=?@[@"cat",?@"dog",?@"mouse",?@"badger"];

//去下標(biāo)法

NSString?*dog?=?animals[1];

//字面量字典

NSDictionary?*personData?=?@{@"firstName":?@"Matt",?@"lastName":?@"Galloway",?@"age":?@28};

NSString?*lastName?=?personData[@"lastName"];

//使用字面量語法創(chuàng)建出來的字符串、數(shù)組、字典對象都是不可變.若想要可變的版本對象,則需要復(fù)制一份

NSMutableArray?*mutable?=?[@[@1,?@2,?@3,?@4,?@5]?mutableCopy];

2.局限性

字面量語法有個小小的限制,就是除了字符串以為,所創(chuàng)建出來的對象必須屬于Foundation框架才行.

3.要點

應(yīng)該使用字面量語法來創(chuàng)建字符串、數(shù)組、字典、與創(chuàng)建此類對象的常規(guī)方法相比,這么更加簡明扼要.

應(yīng)該通過取下標(biāo)操作來訪問數(shù)組下標(biāo)或字典中的鍵所對應(yīng)的元素.

用字面量語法創(chuàng)建數(shù)組或字典時,若值中有nil,則會拋出異常,因此,務(wù)必確保值里不含nil.

多用類型常量,少用#define預(yù)處理指令

預(yù)處理定義

1

2

#define?ANIMATIOM_DURATION0.3

說明:預(yù)處理的定義可能是你想要的效果但是這樣定義的常量沒有類型信息,預(yù)處理過程會把碰到的所有ANIMATIOM_DURATION一律替換成0.3假設(shè)此指令聲明在某個頭文件中,那么所有引入了這個頭文件的代碼,?ANIMATIOM_DURATION都會被替換

類型常量的定義

1

2

3

staticconstNSTimeInterval?KAnimationDuration?=0.3;

說明:??*?此方法定義的常量?能清楚的描述常量的含義,有助于編寫開發(fā)文檔,能令閱讀代碼的人更加容易理解

*?命名常量的位置很重要?我們總喜歡在頭文件聲明的預(yù)處理指令,這樣做真的很槽糕,當(dāng)常量的名稱有可能互相沖突的時候更是如此,?ANIMATIOM_DURATION這個常量就不應(yīng)該出現(xiàn)在頭文件中,因為所有引入了這份頭文件的其他文件都會出現(xiàn)這個名字

公開的常量

1

2

3

4

5

說明:此類常量需放在"全局符號表中",以便可以在定義該常量的編譯單元之外使用.因此與staticconst有所不同

//聲明

extern?NSString?*constconstantString;

//實現(xiàn)

NSString?*constconstantString?=?@"constantString";

注意:

不要用預(yù)處理指令定義常量。這樣定義出來的常量不含類型信息,編譯器只是會在編譯前據(jù)此執(zhí)行查找與替換操作。即使有人重新定義了常量值,編譯器也不會產(chǎn)生警告信息,這將導(dǎo)致應(yīng)用中的常量值不一致.

在實現(xiàn)文件中使用static const來定義 只是在編譯單位內(nèi)可見的常量 由于此類常量不在全局符號表中,所以無需為其名稱加前綴

在頭文件中使用extern來聲明全局常量 并在相關(guān)實現(xiàn)文件中定義其值 這種常量要出現(xiàn)在全局符號表中 所以其名稱應(yīng)加以區(qū)隔 通常用與之相關(guān)的類名做前綴

用枚舉表示狀態(tài)、選項、狀態(tài)碼

在以一系列常量來表示錯誤狀態(tài)碼或可組合的選項時,極宜使用枚舉為其命名.

定義枚舉

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

typedef?enum?connectionState?{

connectionStateDisConnected,

connectionStateConnecting,

connectionStateConnected

}?state;

彼此組合的枚舉

typedef?NS_OPTIONS(NSUInteger,?UIControlState)?{

UIControlStateNormal???????=0,

UIControlStateHighlighted??=1<<0,//?used?when?UIControl?isHighlighted?is?set

UIControlStateDisabled?????=1<<1,

UIControlStateSelected?????=1<<2,//?flag?usable?by?app?(see?below)

UIControlStateFocused?NS_ENUM_AVAILABLE_IOS(9_0)?=1<<3,//?Applicable?only?when?the?screen?supports?focus

UIControlStateApplication??=0x00FF0000,//?additional?flags?available?for?application?use

UIControlStateReserved?????=0xFF000000//?flags?reserved?for?internal?framework?use

};

注意點:

應(yīng)用枚舉來表示狀態(tài)機的狀態(tài) 傳遞給方法的選項以及狀態(tài)碼等值 給這些值起個易懂的名字

如果把傳遞給某個方法的選項表示為枚舉類型,而多個選項又可同時使用 那么就將各選項值為2的冪 以便通過按位或操作將其組合起來

用NS_OPTIONS宏來定義枚舉類型 并指明底層數(shù)據(jù)類型 這樣做可以確保枚舉是用開發(fā)者所選的底層數(shù)據(jù)類型實現(xiàn)出來的 而不會采用編譯器所選的類型

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容