iOS代碼規(guī)范

iOS代碼規(guī)范

代碼規(guī)范
    遵循原則:見文知意贼邓、清晰簡潔、無錯热鞍。
包括:
命名規(guī)范
代碼規(guī)范
注釋規(guī)范
項(xiàng)目規(guī)范

1葫慎、命名規(guī)范

類名首字母大寫,方法首字母小寫薇宠,方法中的參數(shù)首字母小寫偷办,同時盡量讓方法的命名讀起來像一句話,能夠傳達(dá)出方法的意澄港。
原則:見文知意椒涯。

1)類名命名

采用大駝峰法則,即每個單詞的首字母采用大寫字母回梧。
格式:前綴+名字+類型
前綴:大寫废岂,例如GG,用于修飾
類型:用于表明類的范圍的狱意,繼承NSObject的類可不寫

例如:
GGDemoView:前綴:GG湖苞,名字:Demo,類型:View
2)變量命名

采用小駝峰法則详囤,第一個單詞的首字母小寫财骨,后面單詞的首字母全部大寫。

例如:name纬纪,passWord蚓再。
3)常量命名

采用大駝峰法則,前綴加小k包各。

例如:NSString *kPersonName = @”abc”;
4)宏命名

采用大駝峰法則。

例如:#define AppKey  @"1235"
5)方法命名

采用小駝峰法則靶庙,第一個單詞的首字母小寫问畅,后面單詞的首字母全部大寫。同時,盡量讓方法名讀起來像是一句話护姆,能夠清晰的傳達(dá)方法要表達(dá)的意思矾端。
例如:

- (instancetype)initWithFrame:(CGRect)frame;
  • 取得某個對象,以名詞作為方法的開頭卵皂;
例如:
    - (UIImage *)imageName:(NSString *)name;
  • 表示執(zhí)行某操作秩铆,以動詞作為方法的開頭,get灯变、make殴玛、set等;
例如:
    - (void)setupData;
  • 如果方法有參數(shù)添祸,每個參數(shù)前最好有參數(shù)提示滚粟;
例如:
    - (instancetype)init:(CGRect)frame; //糟糕的方法命名
    - (instancetype)initWithFrame:(CGRect)frame; //好的方法命名
  • 如果方法有多個參數(shù),不需要用and連接刃泌;
例如:
    - (instancetype)initWithFrame:(CGRect)frame andTitle:(NSString *)title; //不是很好
    - (instancetype)initWithFrame:(CGRect)frame title:(NSString *)title; //好
  • 返回BOOL值在方法前加前綴is凡壤、has
例如:
    - (BOOL)isEqualToString:(NSString *)aString;

2耙替、代碼規(guī)范

原則:有條理亚侠,層次清晰

1)屬性、變量的聲明
  • 屬性俗扇、變量聲明
    屬性聲明格式:@property(nonatomic, 關(guān)鍵字) + 1空格 + 類型 + 1空格 + *名稱;
    例如:
@property(nonatomic, strong) NSString *name;

特點(diǎn):類型跟星號之間有一個空格硝烂,星號緊跟變量名稱,括號內(nèi)的參數(shù)列表狐援,逗號緊跟前一個參數(shù)再空格接下一個參數(shù)钢坦。
注意:此格式適用于繼承自NSObject類的類型,對于基本數(shù)據(jù)類型的屬性/變量只是沒有“*”的區(qū)別啥酱。

  • 屬性的使用
    請使用self.的方式應(yīng)用類的成員變量爹凹,不推薦使用_變量名的方式。
    例如:
    推薦使用self.的方式:
        self.tableView.delegate = self;
        self.tableView.dataSource = self;
        
    不推薦如下的方式:
        _tableView.delegate = self;
        _tableView.dataSource = self;
2)方法
  • 方法聲明的規(guī)范
    格式:-/+ + 空格 (類型)方法名;
    特點(diǎn):-/+與返回類型之間有個空格镶殷,參數(shù)的類型用括號括起禾酱,參數(shù)之間有一個空格。
例如:
  - (instancetype)initWithFrame:(CGRect)frame;
  - (instancetype)initWithFrame:(CGRect)frame type:(int)type;
  • 方法實(shí)現(xiàn)
    特點(diǎn):除上面的2)方法聲明的規(guī)范外绘趋,
    1)在方法的結(jié)尾處加一個空格颤陶,然后緊跟大括號“{”;
    2)方法與方法之間空一行陷遮。
例如:
  - (instancetype)initWithFrame:(CGRect)frame type:(int)type {
    
  }
  //方法與方法之間空一行
  - (void)viewDidLoad {
    [super viewDidLoad];
  }
3)變量與方法聲明的位置

對于私有變量滓走、私有方法的聲明,請把它們放在.m文件中帽馋。區(qū)別是不是私有搅方,原則就是這個變量或方法要不要在別的地方使用比吭,若是不要,就不要在.h文件中聲明了姨涡,在.h文件中聲明的就是公開衩藤。

4)操作符前后用1個空格隔開。

例如:

推薦寫法:
    NSString *str = @"123456";
    NSInteger num = 2;
    BOOL flage = num > 1;
    str = flage ? @"1" : @"0";
這樣寫程序沒有對與錯涛漂,只是給人感覺有點(diǎn)凌亂:
    NSString*str =@"123456";
    NSInteger num=2;
    BOOL flage=num>1;
    str = flage?@"1":@"0";
5)代碼縮進(jìn)

1)使用xcode默認(rèn)縮進(jìn)赏表,即tab = 4space,快捷鍵:左縮進(jìn)commend+[匈仗,右縮進(jìn)commend+]瓢剿;
2)xcode也提供格式化功能,選中代碼锚沸,快捷鍵:control+i跋选。

6)判斷nilYES/NO

推薦寫法:

if (someObject) { ... }
if (!someObject) { ... }

避免如下寫:

if (someObject == YES) { ...}
if (someObject != nil) { ...}

理由:if (someObject == YES)容易誤寫成賦值語句, if (someObject)寫法也很簡潔。

7)可變類型的變量要初始化

對于mutale類型的成員變量哗蜈,如NSMutableArray前标、NSMutableDicyionary,先要完成初始化距潘,再使用炼列,沒有初始化的話這個變量是為nil的。

8)block

使用block塊音比,要弱引用對象俭尖,避免循環(huán)引用。使用關(guān)鍵字__weak__block洞翩,__block可以修飾對象也可修飾基礎(chǔ)數(shù)據(jù)類型的變量稽犁,__weak只能修飾對象。
規(guī)范寫法如下:

__weak typeof(self) weakSelf = self;
myObj.myBlock =  ^{
    __strong typeof(self) strongSelf = weakSelf;
    if (strongSelf) {
        [strongSelf doSomething]; // strongSelf != nil
        // preemption, strongSelf still not nil
        [strongSelf doSomethingElse]; // strongSelf != nil
    }       
    else {
        // Probably nothing...
        return;
    }
};
9)移除通知

注冊了observer骚亿,記得移除它已亥,不限移除時間,但要保證在對象銷毀前移除它来屠,建議在dealloc方法中將observer移除虑椎。

10)避免硬編碼

死值每次修改的時候容易被遺忘,也不方便查找俱笛、修改捆姜,另外僅僅看到一個數(shù)字,完全不知道這個數(shù)字代表的意義迎膜∧嗉迹可以采用動態(tài)獲取,定義枚舉磕仅、定義常量(知道含義)的方式零抬。
例如:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 2; //應(yīng)盡量避免使用具體的數(shù)值镊讼,除非是很明確的情況下
}   

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return self.array.count; //這種方式比寫具體值方便多了宽涌。
}   
11)對象判空(nil)處理

對于外部傳過的參數(shù)(特指對象)建議先進(jìn)行空判斷平夜,避免不必要的錯誤,尤其是跟網(wǎng)絡(luò)相關(guān)的數(shù)據(jù)(有可能json解析出來為空)卸亮。
提示:NSArray忽妒、NSDictionary類型的對象是不能添加nil數(shù)據(jù)的。

3兼贸、注釋規(guī)范

注釋方法有單行多行注釋段直,按需求選擇。單行注釋的快捷鍵:commend+/溶诞。

1)變量注釋
2)方法注釋

方法定義必須注釋清楚用途鸯檬、入?yún)⒊鰠⒑x、要求螺垢,建議使用VVdocumenter插件喧务;
備注:xcode 8以后,會發(fā)現(xiàn)常用的注釋插件VVdocumenter無法使用了枉圃。其實(shí)它是被Apple采納了功茴,融合到了xcode中了∧跚祝快捷鍵:option+commend+/坎穿。(注意:光標(biāo)要位于具體的方法處才有效)

3)類描述

類名最好能描述清楚自身是干什么用的,在頭文件的注釋中增加一行描述返劲;

4)pragma mark

代碼要按功能模塊分塊玲昧,用#pragma mark – name進(jìn)行分組;

4篮绿、項(xiàng)目規(guī)范

1)項(xiàng)目的目錄結(jié)構(gòu)

一個合理的目錄結(jié)構(gòu)首先應(yīng)該是清晰的孵延,讓人一眼看上去就能大概了解目錄的職責(zé),且容易應(yīng)對新的變化搔耕。
在我們的項(xiàng)目中主目錄按照模塊分類隙袁,內(nèi)目錄按業(yè)務(wù)分類的方式。我們在xcode看到了目錄結(jié)構(gòu)弃榨,也要保證文件在磁盤中的存儲結(jié)構(gòu)也是如此的菩收,方便查找、也方便管理鲸睛。例如娜饵,在xcode創(chuàng)建了一個model目錄,當(dāng)向model目錄中添加文件時官辈,確保文件的存儲位置是在model這個文件夾下箱舞。

2) 項(xiàng)目文件命名規(guī)范

采用大駝峰法則遍坟。但是不限使用中文標(biāo)注,中文標(biāo)注建議用小括號括起來晴股。

例如:Tools(工具)
3)操作上的建議

1)按照目錄層次來放置文件愿伴,建立子目錄。

--養(yǎng)成一個良好的編程習(xí)慣 --

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末电湘,一起剝皮案震驚了整個濱河市隔节,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寂呛,老刑警劉巖怎诫,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贷痪,居然都是意外死亡幻妓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門劫拢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肉津,“玉大人,你說我怎么就攤上這事尚镰》Щ” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵狗唉,是天一觀的道長初烘。 經(jīng)常有香客問我,道長分俯,這世上最難降的妖魔是什么肾筐? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮缸剪,結(jié)果婚禮上吗铐,老公的妹妹穿的比我還像新娘。我一直安慰自己杏节,他們只是感情好唬渗,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奋渔,像睡著了一般镊逝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嫉鲸,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天撑蒜,我揣著相機(jī)與錄音,去河邊找鬼。 笑死座菠,一個胖子當(dāng)著我的面吹牛狸眼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浴滴,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼拓萌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了巡莹?” 一聲冷哼從身側(cè)響起司志,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎降宅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囚霸,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腰根,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拓型。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片额嘿。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖劣挫,靈堂內(nèi)的尸體忽然破棺而出册养,到底是詐尸還是另有隱情,我是刑警寧澤压固,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布球拦,位于F島的核電站,受9級特大地震影響帐我,放射性物質(zhì)發(fā)生泄漏坎炼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一拦键、第九天 我趴在偏房一處隱蔽的房頂上張望谣光。 院中可真熱鬧,春花似錦芬为、人聲如沸萄金。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氧敢。三九已至,卻和暖如春莲镣,著一層夾襖步出監(jiān)牢的瞬間福稳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工瑞侮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留的圆,地道東北人鼓拧。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像越妈,于是被迫代替她去往敵國和親季俩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容