通過建立代碼編寫規(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、如何封裝代碼做修?霍狰?