代碼規範很重要,一個良好的代碼習慣要從一開始就養成
公共類和文件的設計
(網絡請求類、數據庫類、Model類、View類,Controller<根據流程圖>、Handle類<數據處理>、公共頭文件<宏、接口的.h{URL}、常量const{通知中心的名字、一些狀態碼、枚舉、結構體}、全局配置(適配{屏幕適配、iOS系統適配}的宏、系統版本判斷、顏色值{參考圖片})>)
1、文件
一、項目文件必須使用一個有意義的名字。
例如:TestDownImages
二、任何文件的命名不要以中文命名。
三、文件的目錄按如下結構
a、Document — 文檔所在路徑
b、Help — 幫助文件所在路徑
c、圖片等資源要放在單獨的目錄或組中 如:Images、Pic等。
d、Public文件夾,存放公共類和第三方類庫,及工具類
Base文件夾,自定義的父類
Thirds文件夾,引用外部文件或某個單獨的功能。例如:應用了第三方的json下載的功能,應該把全部的文件放在單獨的Json組中。
Tools文件夾,自定義的工具類(網絡請求、數據庫類等),公共頭文件(宏、接口的url、常量const{通知中心的名字、狀態碼、枚舉、結構體等},全局配置文件(屏幕適配、系統sdk適配、顏色值、圖片名字等))。
e、model、View或ViewController等文件能夠按照功能或文件類型放在獨立的組中。
2、註釋
註釋是一個程序必不可少的一部分,它起到幫助閱讀的重要做用。
而且必定要寫正確的註釋。註釋若是不正確比不寫還可怕。
一、註釋可使用/*...*/和//兩種註釋符號,涉及多行註釋時儘可能使用 /*...*/。
二、對與一行代碼的註釋能夠放在前一行或本行的結束,不容許放在下一行,更不能在一行語句的中間(雖然這不會致使程序出錯)。
三、方法前面的註釋應按下面的格式
/**
* @方法名稱
* @方法描述
* @輸入參數
* @輸出參數
* @返回值
*/
四、沒必要每行都加註釋,在段落間加註釋要好於每行加。顯而易見的代碼加上的是無用註釋,因此不要加。
3、代碼的排版
程序員在代碼的編排上必須規範,若是排版格式混亂,別人就很難看懂你寫的是什麼,這將發費不少沒必要要的時間。
一、代碼的縮進應使用空格,且以兩個字符爲單位。不能使用製表符(tab)。
二、每行的長度最多不得超過100個字符
以15寸Macbook Pro的大小,每行100個字符時能最大化地同時容下編輯器和iPhone模擬器,
經過 「Xcode => Preferences => TextEditing => 勾選Show Page Guide / 輸入100 => OK」 來設置提醒
三、大括號‘{}’的使用,最後一個括號在源程序中要單獨佔一行。
例如:
for(int i = 0; i < 10; i++) {
}
四、空格的使用
a、關鍵字和表達式之間要有空格
如:if(i = 0; i < 10; i++)
b、單目操做符不能與操做數分開
如:!a
c、除,外其餘的雙目操做符應與操做數分開
如:i = i + 1; if(a > b)
d、.h中協議<>前面要有一個空格。
e、成員聲明時,類型與變量之間至少有一個空格,*號要靠近變量。
f、@proprety()裏面,號緊跟前一個變量,與後一個變量之間留一個空格,()外先留一個空格再聲明屬性。
g、方法的+、-後面留一個空格。
h、方法的返回類型與*之間留一個空格。參數中返回類型與*之間留一個空格。
i、在多參數方法中,每一個參數後面都有一個空格。
五、每行只能有一個語句
例如:NSInteger row = [indexPath row];
NSString *imgurl = [self.list objectAtIndex:row];
NSURL *url = [NSURL URLWithString:imgurl];
六、空行
a、.h中的空行
import與interface之間加空行
成員變量與屬性間, 屬性與方法間 加空行
不一樣類型成員變量間, 不一樣類型的屬性間,不一樣類型的方法間 加空行
b、.m中
延展與implementation之間加空行
implementation與方法實現間加空行
方法與方法實現間加空行
方法內不一樣的邏輯代碼塊之間加空行
4、命名規範
一、保留字
o-c中保留字或關鍵字不能用於命名。
二、方法
a、方法的名稱應所有使用有意義的單詞組成,且以小寫字母開頭。多單詞時,後面的單詞首字母大寫(駝峯命名)。參數有別名時,參數別名與參數名一致,
但參數名前綴以_。參數別名與前一參數保留一個空格。參數無別名時,以有意義的字母命名。
例如:-(NameValue *) initWithId:(int)theId andName:(NSString *)theName;
三、變量
a、變量的名字要有意義,其餘人能很容易讀懂其表明的意義。變量名能夠採用同義的英文命名,可以使用幾個英文單詞,第一個單詞首字母小寫,其餘的單詞首字母大寫。
如:NSString *userName;
b、對於一些特殊類型的變量,命名時要帶上類型。
如、NSArray *cityArray;
c、對於控件命名時,後綴要帶上特定的控件名。
UILable *userNameLable;
d、私有的實例變量前加一個下劃線
如:_myPrivateValue;
四、常量
a、避免在程序中直接出現常數,使用超過一次的應以宏定義的形式代替
b、常數的宏定義應與它實際使用時的類型一致。
c、常量的命名應該能表達出它的用途,而且用大寫的字母表示。
d、一些常量前加特殊前綴,能夠做爲不一樣常量的區分。
五、類
a、全部的類名,接口名都要以大寫字母開頭,多單詞時後面的單詞的首字母都大寫。類,接口名必須是有意義的。
c、繼承自UIView的類以View結尾,如:imageView。繼承自ViewController的類以viewController結尾 如:imageViewController
5、修改規範
一、新增行先後應有註釋說明
//修改人 修改時間 修改說明
新增的代碼
//修改結束
二、刪除代碼項的先後應有註釋
//修改人 修改時間 修改說明
刪除的代碼(將代碼註釋掉 並非去掉)
//修改結束
三、修改代碼以註釋舊代碼新增新代碼的方式進行。
6、嵌套語句的使用規則
在程序中使用嵌套語句,必定要使嵌套語句的層次結構清晰明瞭。不能
讓人看了半天還分不清你的層次,弄清你想要表達的意思。
一、if...else..條件語句的使用
a、判斷的結構要合理
例如:if(a)
{
.......(有不少行代碼)
}
else
{
......(只有一行代碼)
}
如上的代碼就不是很合理,能夠修改成以下寫法
if(!a)
{
......(只有一行代碼)
}
else
{
.......(有不少行代碼)
}
b、嵌套的if條件不要太多
例如:if(a)
{
if(b)
{
if(c)
{
......(還有不少if條件)
}
else
{}
}
else
{}
}
else
{}
如上代碼有好多層的if條件判斷的嵌套,給人的感受就是太亂,並且不
太容易分清判斷的究竟是什麼。那麼就要把減小嵌套的語句,將嵌套的
語句方法化或者作其餘處理。