代碼規(guī)范

代碼規(guī)范

1.封裝

所有方法、屬性名稱嚴(yán)格仿照蘋果API的命名方式,做到見名思意。

2.命名規(guī)則

代碼中的命名嚴(yán)禁使用拼音與英文混合的方式,更不允許直接使用中文的方式。正確的英文拼寫和語法可以讓閱讀者易于理解,避免歧義。

* 注意:即使純拼音命名方式也要避免采用。但alibab、taobao、youku、hangzhou等國(guó)際通用的名稱,可視同英文.

大駝峰規(guī)則:每個(gè)單詞的首字母大寫。例:NameTextField

小駝峰原則:第一個(gè)單詞首字母小寫,其余都大寫。例:nameTextField。

類名前綴: 無需使用前綴,

類名后綴: 以控件名稱為后綴,TableViewCellCollectionViewCell統(tǒng)一用Cell為后綴; 數(shù)據(jù)層統(tǒng)一以Model為后綴。如:

+ LoginView
+ LoginCell
+ LoginModel(數(shù)據(jù)層統(tǒng)一后綴為Model)

控制器: 在名稱結(jié)尾縮寫Controller,如: 類名+Controller

  • LoginController

屬性: 除了Cell以外所有的控件和類名在名稱結(jié)尾寫全稱(別管多長(zhǎng)統(tǒng)一寫全稱?。?/h3>
+ @property (nonatomic, strong) UIButton *loginButton;
+ @property (nonatomic, strong) UIButton *loginLabel;
+ @property (nonatomic, strong) UIButton *loginView;
+ @property (nonatomic, strong) UIButton *loginTextField;
+ @property (nonatomic, strong) UIButton *loginTextView;

變量命名,以下劃線'_'開頭:

  • BOOL _isLoginOtherDevice;

常量命名,以通知舉例: 模塊+動(dòng)作+Notification

  • LivingPraiseCountNotification
  • GOWHBChatListCountNotification

以請(qǐng)求頭拼接舉例: 模塊+用途

  • ShoppingAddNewAddress
  • GroupChatCreateNewGroup

枚舉命名,應(yīng)以枚舉類型開頭,以枚舉標(biāo)記為輔:

typedef NS_ENUM(NSInteger,UITableViewScrollPosition)
{
UITableViewScrollPositionNone,
UITableViewScrollPositionTop,
UITableViewScrollPositionMiddle,
UITableViewScrollPositionBottom,
};

3.全局的變量盡量使用常量,用extern進(jìn)行拓展,不要使用宏。

4.不使用pch文件,把常用的頭文件放在自定義的頭文件包含,能用常量就不要使用宏,不常用的頭文件用到再包含。

5.注釋規(guī)范

為了減少他人閱讀你代碼的痛苦值,請(qǐng)?jiān)陉P(guān)鍵地方做好注釋。

類注釋

//
//  MyViewController.m
//  text
//
//  Created by 林霞 on 2017/9/12.
//  Copyright ? 2017年 林霞 1826692128@qq.com. All rights reserved.
//

該注釋是自動(dòng)生成的,在xcode中設(shè)置即可。Created by 電腦用戶名 on 創(chuàng)建該文件的時(shí)間。Copyright 2017 后面的名字和郵箱是自己填寫和設(shè)置的。具體可在xcode工程,Project Document中設(shè)置。這樣便可在每次新建類的時(shí)候自動(dòng)加上該頭注釋。

方法注釋

方法注釋,方法外部統(tǒng)一用option + command + /,方法內(nèi)部統(tǒng)一用//注釋。

/**
 測(cè)試
 */
- (void)text
{
    //測(cè)試按鈕事件響應(yīng)
}

6.h文件的引用必須使用@class,不要使用#import!

7.使用NSDictionaryNSArray,NSString內(nèi)容進(jìn)行操作、處理服務(wù)器返回?cái)?shù)據(jù)等操作時(shí),應(yīng)調(diào)用空值判斷。

8.一定要注意自己接觸過的類的dealloc必須要走

9.UIViewController請(qǐng)按照如下分類

#pragma mark - life cycle
#pragma mark - event response
#pragma mark - UITableViewDelegate && UITableViewDataSource
(代理順序往下排列)
#pragma mark - getters and setters
#pragma mark - private

* 注意:所有視圖或者對(duì)象的創(chuàng)建請(qǐng)盡量使用懶加載,調(diào)用的時(shí)候全部使用self.textBtn這樣的方式。如果是確定的不可變數(shù)組、字典,可直接給定數(shù)組中的元素。(getters and setters分類中,懶加載可出現(xiàn)_調(diào)用對(duì)象,其它情況請(qǐng)遵循self.調(diào)用原則)

#import "ViewController.h" 

@interface ViewController () 
@property (nonatomic, strong)UIButton * textBtn; 
@end 

@implementation ViewController 

#pragma mark - life cycle 
- (void)viewDidLoad {
    [super viewDidLoad]; 
    [self.view addSubview:self.textBtn]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
 } 

#pragma mark - private 

#pragma mark - event response 

#pragma mark - UITableViewDelegate && UITableViewDataSource 
//(代理順序往下排列) 

#pragma mark - CTAPIManagerCallBackDelegate 

#pragma mark - getters and setters 
- (UIButton *)textBtn { 
    if (_textBtn == nil) {
       _textBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
       _textBtn.frame = CGRectMake(300, 250, 100, 100); 
       _textBtn.backgroundColor = [UIColor yellowColor]; 
       _textBtn.titleLabel.text = @"text"; 
       [_textBtn addTarget:self action:@selector(text) forControlEvents:UIControlEventTouchUpInside]; 
     } 
     return _textBtn; 
} 
@end

10.變量和方法

變量和方法的命名都遵循小駝峰命名。例如:textVariableStr, - (void)textAction響應(yīng)事件。
變量命名對(duì)照表(如果用到下表中沒有列舉出來,請(qǐng)去掉UI、NS遵循實(shí)際規(guī)則即可?;蛘咭豢淳椭赖耐ㄓ煤?jiǎn)寫)
方法命名對(duì)照表(方法多為動(dòng)詞或動(dòng)名詞)

功能 示例
- (id)initXX. 初始化相關(guān)方法,使用init為前綴標(biāo)識(shí),如初始化布局- (id)initView
- (BOOL)isXX. 方法返回值為boolean型的請(qǐng)使用is前綴標(biāo)識(shí)
- (UIView *)getXX 返回某個(gè)值的方法,使用get為前綴標(biāo)識(shí)
- (void)setXX 設(shè)置某個(gè)屬性值或者相關(guān)數(shù)據(jù)
- (void)updateXX 更新數(shù)據(jù)
- (void)saveXX 保存數(shù)據(jù)
- (void)drawXX 繪制相關(guān),使用draw前綴標(biāo)識(shí)
- (void)clearXX 清除數(shù)據(jù)
- (void)XXXAction 響應(yīng)事件,使用Action為后綴標(biāo)識(shí)
- (void)loadData 加載數(shù)據(jù)(一般情況下VC中都會(huì)有這個(gè)方法)
- (void)loadMoreData 加載更多數(shù)據(jù)
- (void)setupUI 加載布局(一般情況下VC中都會(huì)有這個(gè)方法)

11.參數(shù)名

參數(shù)名以小駝峰命名,盡量參考蘋果原生方法風(fēng)格編寫。盡量可讀性好,看到方法名就知道這個(gè)方法是用來干什么的。參數(shù)應(yīng)該避免用單個(gè)字符命名。例:- (void)setDataImageUrl:(NSString *)imageUrl name:(NSString *)nameStr content:(NSString *)contentStr

12.文件夾命名

創(chuàng)建文件夾最好創(chuàng)建實(shí)體文件夾,找到工程目錄,創(chuàng)建相應(yīng)文件夾并拖入工程。文件夾命名使用相應(yīng)模塊結(jié)構(gòu)分層的英文,首字母要大寫。例:Model,View,Controller,Tool,Other,Service等等。

13.編碼規(guī)范

  • 所有的方法之間空一行。
  • 所有的代碼塊之間空一行,刪除多余的注釋。
  • 所有自定義的方法需要給出注釋。
  • 盡量使用懶加載,在控制器分類時(shí)有提及和要求,其它自定義類按照控制器格式分類,沒有的分類不寫即可。
  • 代碼后的’{‘不需要獨(dú)占一行,包括方法之后,if,switch等。
  • 必須要統(tǒng)一的要求,屬性的定義請(qǐng)按照下圖property之后,空一格,括號(hào)之后空一格,寫上類名,空一格之后跟上*和屬性名。
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) DeliveryModel *delivery;
@property (nonatomic, strong) DeliveryLookAdapter *lookAdapter;
@property (nonatomic, strong) DeliveryLookAPIManager *lookManager;
  • 遵循一般代碼規(guī)范,多模仿蘋果API。
  • 刪除不用的代碼。
  • 如果有方法一直不會(huì)用到,請(qǐng)刪除(除工具類)。
  • 沒有執(zhí)行任何業(yè)務(wù)邏輯的方法,請(qǐng)刪除或給予注釋,刪除多余的資。源或文件,添加必要的注釋。
  • 比較大的代碼塊需要給出注釋。

14.其它規(guī)范

  • 建議項(xiàng)目統(tǒng)一使用Masonry和xib結(jié)合的方式布局。不允許出現(xiàn)直接設(shè)置frame的情況。如果是純代碼的項(xiàng)目,不允許出現(xiàn)xib和拉約束的情況。不建議使用純storyboard開發(fā)。
  • 數(shù)據(jù)提供統(tǒng)一的入口。無論是在 MVP、MVC 還是 MVVM 中,提供一個(gè)統(tǒng)一的數(shù)據(jù)入口,都可以讓代碼變得更加易于維護(hù)。比如可使用一個(gè)DataManager,把 http、preference、eventpost、database 都放在DataManger里面進(jìn)行操作,我們只需要與DataManger打交道
  • 提取方法,去除重復(fù)代碼。對(duì)于必要的工具類抽取也很重要,這在以后的項(xiàng)目中是可以重用的。
  • 盡可能的使用局部變量
  • 盡量減少對(duì)變量的重復(fù)計(jì)算。
  • 盡量在合適的場(chǎng)合使用單例。使用單例可以減輕加載的負(fù)擔(dān),縮短加載的時(shí)間,提高加載效率。但并不是所有的地方都適用于單例,簡(jiǎn)單來說單例主要適用于以下三個(gè)方面:
    1. 控制資源的使用,通過線程同步來控制資源的并發(fā)訪問。
    2. 控制實(shí)例的產(chǎn)生,以達(dá)到節(jié)約資源的目的。
    3. 控制數(shù)據(jù)的共享,在不建立直接關(guān)聯(lián)的條件下,讓多個(gè)不相關(guān)的進(jìn)程或線程之間實(shí)現(xiàn)通信。
  • 最后不要忘了檢測(cè)內(nèi)存泄漏??墒褂肐nstruments分析內(nèi)存。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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