代碼規(guī)范

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

一忱反、命名規(guī)則

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

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

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

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

  • 無自引用

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

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

  • 類名需要加前綴甘萧,前綴一般為:“項(xiàng)目關(guān)鍵詞”+“模塊關(guān)鍵詞”
    如短信需求,前綴應(yīng)該為“MGSMS”(現(xiàn)在是FB梆掸,因?yàn)橹绊?xiàng)目名為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修飾一個(gè)常量障陶,一般是寫在.h文件中滋恬,然后將.h的頭文件加入預(yù)編譯pch文件中,以小寫字母k開頭抱究,后面單詞遵循"駝峰原則"命名恢氯。例如:
      const float kMaxHeigh = 100.f;
      const int kNumberCount = 100;
  • 如果是特殊含義的常量,聲明形式為"各APP前綴+名稱",形式如下:
const NSString *FB*** = @"xx"

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

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

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

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

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

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

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

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

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

- 建議項(xiàng)目統(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分支做合并
  • 提交代碼時(shí)犬耻,確保本地build success
  • 項(xiàng)目測(cè)試結(jié)束之后,即定檔之后执泰,才合并到master分支
  • 項(xiàng)目提測(cè)需要打tag
2枕磁、項(xiàng)目?jī)?nèi)環(huán)境配置(APPInfo管理)

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

  • fir:即平時(shí)我們打包到fir的環(huán)境计济,測(cè)試證書,release環(huán)境
  • beta:testflight版本排苍,正式證書沦寂,release環(huán)境
  • appstore:testflight版本,正式證書淘衙,release環(huán)境

APPIsDev():

其他

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市饰及,隨后出現(xiàn)的幾起案子蔗坯,更是在濱河造成了極大的恐慌,老刑警劉巖燎含,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宾濒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡屏箍,警方通過查閱死者的電腦和手機(jī)绘梦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赴魁,“玉大人卸奉,你說我怎么就攤上這事∮庇” “怎么了榄棵?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我疹鳄,道長(zhǎng)拧略,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任瘪弓,我火速辦了婚禮垫蛆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腺怯。我一直安慰自己月褥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布瓢喉。 她就那樣靜靜地躺著,像睡著了一般舀透。 火紅的嫁衣襯著肌膚如雪栓票。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天愕够,我揣著相機(jī)與錄音走贪,去河邊找鬼。 笑死惑芭,一個(gè)胖子當(dāng)著我的面吹牛坠狡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播遂跟,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼逃沿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了幻锁?” 一聲冷哼從身側(cè)響起凯亮,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哄尔,沒想到半個(gè)月后假消,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岭接,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年富拗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸣戴。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡啃沪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出葵擎,到底是詐尸還是另有隱情谅阿,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站签餐,受9級(jí)特大地震影響寓涨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜氯檐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一戒良、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冠摄,春花似錦糯崎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至拆挥,卻和暖如春薄霜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纸兔。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工惰瓜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汉矿。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓崎坊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親洲拇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奈揍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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

  • 前言 說是前言,其實(shí)也是本文誕生的目的呻待。隨著公司業(yè)務(wù)的不斷增加打月,功能的快速迭代,app的業(yè)務(wù)線越來越多蚕捉,代碼體積變...
    Yealink閱讀 5,274評(píng)論 0 13
  • 前言 說是前言奏篙,其實(shí)也是本文誕生的目的。隨著公司業(yè)務(wù)的不斷增加迫淹,功能的快速迭代秘通,app的業(yè)務(wù)線越來越多,代碼體積變...
    夢(mèng)翔_d674閱讀 1,487評(píng)論 0 2
  • 前言說是前言敛熬,其實(shí)也是本文誕生的目的肺稀。隨著公司業(yè)務(wù)的不斷增加,功能的快速迭代应民,app的業(yè)務(wù)線越來越多话原,代碼體積變得...
    Mr_yinwei閱讀 640評(píng)論 0 0
  • 約定 在我看來夕吻,開發(fā)規(guī)范像是一條可供參考的標(biāo)準(zhǔn)線。不同開發(fā)者可以根據(jù)這條標(biāo)準(zhǔn)線來規(guī)范自己的開發(fā)行為繁仁,尤其是在大的項(xiàng)...
    xxzsxxzs閱讀 615評(píng)論 1 0
  • 推薦文章:禪與 Objective-C 編程藝 前言 為??高產(chǎn)品代碼質(zhì)量,指導(dǎo)廣大軟件開發(fā)人員編寫出簡(jiǎn)潔涉馅、可維護(hù)、...
    WolfTin閱讀 2,749評(píng)論 0 1