代碼規(guī)范

通過建立代碼編寫規(guī)范,形成iOS開發(fā)團(tuán)隊編碼約定,提高程序的可靠性、可讀性、一致性、可維護(hù)、可擴(kuò)展,保證程序代碼的質(zhì)量。提高程序的重用性,使開發(fā)人員之間的工作成果可以共享。

一、命名規(guī)則

官方規(guī)則:Cocoa代碼指南

1、總則
  • 簡潔
    簡單明了,盡量使用全拼
應(yīng)該: setBackgroundColor
不應(yīng)該:setBkgdColor

當(dāng)然,我們也會有一些常用的縮略詞,比如 info 代表 Information等(待補(bǔ)充)

  • 一致性
    作用相同,或者在表達(dá)同一件事時,統(tǒng)一命名。
    比如位置存儲信息 location,不要再出來place表示位置的情況。

  • 無自引用

應(yīng)該:nameString
不應(yīng)該:nameStringObject
2、一般類、屬性、方法命名

遵守駝峰命名法,類名首字母大寫,方法名和屬性首字母小寫(首字母為縮略詞,如WWDC時除外)

  • 類名需要加前綴,前綴一般為:“項目關(guān)鍵詞”+“模塊關(guān)鍵詞”
    如短信需求,前綴應(yīng)該為“MGSMS”(現(xiàn)在是FB,因為之前項目名為5Ber)
    以類型為結(jié)尾,如:
MWBaseViewController、MWOrderListCell、MWSuggestTextView...
  • 方法命名:參數(shù)前要加描述詞
應(yīng)該:- (void)updateListData:(NSDictionary *)data;
不應(yīng)該:- (void)update:(NSDictionary *)data;
  • 私有變量應(yīng)該盡可能代替實(shí)例變量的使用。盡管使用實(shí)例變量是一種有效的方式,但更偏向于使用屬性來保持代碼一致性。
    屬性get忽略 is前綴,建議如下寫法:
@property (assign, getter=isEditable) BOOL editable;
3、枚舉命名規(guī)則

枚舉名同類名規(guī)則,加前綴,大駝峰命名
枚舉值去掉前綴,大駝峰命名

    typedef NS_ENUM(NSInteger, FBSMSControllerSelectType) {
        ControllerSelectTypeOne,
        ControllerSelectType..,
    };

多用枚舉控制多態(tài),減少bool值等去判斷的情況,增加可讀性

4、常量命名規(guī)則
  • 以const修飾一個常量,一般是寫在.h文件中,然后將.h的頭文件加入預(yù)編譯pch文件中,以小寫字母k開頭,后面單詞遵循"駝峰原則"命名。例如:
      const float kMaxHeigh = 100.f;
      const int kNumberCount = 100;
  • 如果是特殊含義的常量,聲明形式為"各APP前綴+名稱",形式如下:
const NSString *FB*** = @"xx"

宏定義
宏定義在很多方面都會使用,例如定義高度、工具類,還有諸如文件路徑。宏定義的命名,需要傳參數(shù)的時候使用前綴,比如"FB":

#define FB***
二、代碼格式化
  • 文件夾規(guī)范
Mogo
- Main:主流程頁面代碼
   - Home:
      - subModule
         Controller
         server
         - Model
         - View
   - iVoice:
   - ...
- Common:通用代碼(自己封裝的一些UI庫之類的)
   - Customer
   - Tool
   - FBAnalytics
   ...
- Vender:拉進(jìn)來的代碼庫
- Resource:資源文件
- Other:全局文件

Products:應(yīng)用程序
Pods:pod管理
Frameworks:手動拉入的代碼庫
  • 常用規(guī)范
- 運(yùn)算符前后前后各一個空格
- *號緊貼屬性名,和類名之間隔一個空格
NSString *text = @"hello world";

- 括號前后各一個空格
- 屬性修飾符和前面的,隔一個空格
@property (nonatomic, strong) UITableView *tableView;

- 當(dāng)參數(shù)過長的時候,沒個參數(shù)占用一行,且按照冒號對齊。
- 在聲明類方法或者實(shí)例方法的時候,“+”或者“-”和返回值之間保留一個空格,
且返回值和方法名的第一個字母之間不要留空格。
-(void)doSomethingWithName:(NSString *)name
                      rect:(CGRect)rect;

- 注釋一般放在.h,.m文件盡量減少注釋
單行的用//+空格開頭,多行的采用/* */注釋
//TODO:  用來注釋沒有完成的功能
#warning 用來標(biāo)記自己的debug修改,以免遺漏

哪里需要注釋:
1. 在某個變量、屬性、或者方法不能夠直接從名字得知其用途時。 
2. 區(qū)分代碼區(qū)時(在常量文件和控制器類的.h文件和.m文件里)。 
3. 在不相關(guān)的業(yè)務(wù)處理交叉點(diǎn)。
4. 文件的基本信息
5. 有疑惑的地方(FIXME)
6. 未完成或者待優(yōu)化的地方。(#waring //TODO:) 
7. 聲明枚舉時應(yīng)該對每個值說明。
8. 修改別人代碼的時候。
9. 編寫API時,一般需要對所有的接口和屬性帶上注釋
注釋需要注意:
1. 不要為了注釋而注釋,請只在關(guān)鍵點(diǎn)注釋
2. 劃分代碼塊最好的方式不一定是注釋,有時候使用空行也可以達(dá)到很好的效果。

-  初始化
在初始化方法中,不要將變量初始化為“0”或“nil”,那是多余的,
 內(nèi)存中所有的新創(chuàng)建的對象(isa除外)都是0,所以不需要重復(fù)初始化 為 “0”或“nil”;
對nil的檢查
僅在有業(yè)務(wù)邏輯需求時檢查nil,而非為了防止崩潰。

- 組件的創(chuàng)建,應(yīng)該使用代碼塊或者懶加載的方式(我習(xí)慣用代碼塊)

- 建議項目統(tǒng)一使用Masonry的方式布局。不允許出現(xiàn)直接設(shè)置frame的情況。
xib的使用,盡量減少拉約束的情況
  • controller代碼結(jié)構(gòu)
#pragma mark lifeCycle

- (instancetype)init {}
- (void)viewDidLoad {}
- (void)viewWillAppear:(BOOL)animated {}
- (void)dealloc {}
- (void)didReceiveMemoryWarning {}

#pragma mark public-method

#pragma mark private-method

#pragma mark event-response

#pragma mark - Protocol conformance
#pragma mark - UITextFieldDelegate
#pragma mark - UITableViewDataSource
#pragma mark - UITableViewDelegate

#pragma mark set/get
- (NSMutableArray<CyTableViewCellModel *> *)dataSectionArr{}
  • 排版格式
- 盡量使用.語法
應(yīng)該:array.count      
不應(yīng)該:[array count]

多使用黃金路徑
- (void)someMethod {
    if(error) {
        return;
    }
    doSomething
}

而不是:
- (void)someMethod {
    if(!error) {
        doSomething
    }
}

多使用三目運(yùn)算符:
result = a > b ? x : y;

三、git版本控制
1、分支管理
  • 只允許從dev分支拉出新的分支
  • 其他分支只和dev分支做合并
  • 提交代碼時,確保本地build success
  • 項目測試結(jié)束之后,即定檔之后,才合并到master分支
  • 項目提測需要打tag
2、項目內(nèi)環(huán)境配置(APPInfo管理)

三種項目渠道,主要是為了在統(tǒng)計和crash收集時作區(qū)分,以便更好地定位

  • fir:即平時我們打包到fir的環(huán)境,測試證書,release環(huán)境
  • beta:testflight版本,正式證書,release環(huán)境
  • appstore:testflight版本,正式證書,release環(huán)境

APPIsDev():

其他

1、盡量減少IO的操作,優(yōu)先使用內(nèi)存保存
不要出現(xiàn)存儲傳值的情況
2、數(shù)據(jù)量較大的操作,放到子線程處理
3、數(shù)據(jù)處理從代碼中抽離出來,我一般的習(xí)慣是一個控制器一個server,數(shù)據(jù)處理放到server中
4、如何封裝代碼??

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

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

  • 前言 說是前言,其實(shí)也是本文誕生的目的。隨著公司業(yè)務(wù)的不斷增加,功能的快速迭代,app的業(yè)務(wù)線越來越多,代碼體積變...
    Yealink閱讀 5,629評論 0 13
  • 前言 說是前言,其實(shí)也是本文誕生的目的。隨著公司業(yè)務(wù)的不斷增加,功能的快速迭代,app的業(yè)務(wù)線越來越多,代碼體積變...
    夢翔_d674閱讀 1,565評論 0 2
  • 前言說是前言,其實(shí)也是本文誕生的目的。隨著公司業(yè)務(wù)的不斷增加,功能的快速迭代,app的業(yè)務(wù)線越來越多,代碼體積變得...
    Mr_yinwei閱讀 689評論 0 0
  • 約定 在我看來,開發(fā)規(guī)范像是一條可供參考的標(biāo)準(zhǔn)線。不同開發(fā)者可以根據(jù)這條標(biāo)準(zhǔn)線來規(guī)范自己的開發(fā)行為,尤其是在大的項...
    xxzsxxzs閱讀 703評論 1 0
  • 推薦文章:禪與 Objective-C 編程藝 前言 為??高產(chǎn)品代碼質(zhì)量,指導(dǎo)廣大軟件開發(fā)人員編寫出簡潔、可維護(hù)、...
    MurtoTien閱讀 2,947評論 0 1

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