命名規(guī)范
1.項(xiàng)目中所有的類都以項(xiàng)目簡(jiǎn)稱做為前綴(例如LY)沥潭。
2.項(xiàng)目中所有宏定義都以 小寫字母 k 開頭。
3.Model的名稱和字段的名稱,盡量跟服務(wù)器統(tǒng)一。
4.方法名不能使用get或者set開頭挽拔。
5.BOOL屬性應(yīng)加 is 前綴。 例如:
@property (nonatomic, assign) BOOL isShow;
6.類方法以類名開頭但校。 例如:
NSString stringWithFormat:<#(nonnull NSString *), ...#>
7.類擴(kuò)展的命名規(guī)范螃诅。 例如:
#import "NSMutableURLRequest+LYExtension.h"
類擴(kuò)展的方法名最好以擴(kuò)展名的前幾個(gè)字母開頭 + 下劃線
- (NSMutableURLRequest *)ly_authorizedURLRequest {
}
8.圖片的命名規(guī)則 模塊功能具體名字 例如 crm_customer_status
9.枚舉的命名規(guī)范,以類名開頭状囱。 例如:
typedef NS_ENUM(NSUInteger, LYNewJumpType) {
LYNewJumpTypeNone = 0,
LYNewJumpTypeSystemMessage,
LYNewJumpTypeAnnouncemnt,
LYNewJumpTypeDiscussion,
LYNewJumpTypeBusinessCall
};
10.給一個(gè)對(duì)象命名時(shí)建議采用修飾+類型的方式术裸,如果是數(shù)組則用單詞復(fù)數(shù)表示。 例如:
UILabel *nameLabel; //name + label
NSMutableArray *scores;
書寫規(guī)范
1.方法名的書寫規(guī)范 - + 空格 + 返回值 + 方法名 + 空格 + {}亭枷。 例如:
- (void)loadSubViews {
}
2.帶參數(shù)的方法名書寫規(guī)范 后面的參數(shù)名都是小寫 并且子參數(shù)名跟方法名一樣(age:(NSInteger)age 例如:
- (void)initWithName:(NSString *)name age:(NSInteger)age {
}
3.對(duì)象的類型和基礎(chǔ)類型的書寫規(guī)范 例如:
NSString *name = @"小明";
NSInteger age = 12;
BOOL isShow = YES;
4.判斷的書寫規(guī)范袭艺,關(guān)鍵字 + 空格 + 判斷條件 + 空格 + {} 例如:
if (YES) {
}
else if (YES) {
}
else {
}
5.屬性的書寫規(guī)范,關(guān)鍵字 + 空格 + 修飾符 + 空格 + 類型 + 空格 + 屬性名叨粘。 例如:
@property (nonatomic, strong) NSMutableDictionary *clue;
6.寫代碼時(shí)猾编,逗號(hào)后面都用空格隔開瘤睹。而 : 的前后都要用空格隔開。 例如:
<UITableViewDelegate, UITableViewDataSource, LYRegionSelectViewDelegate, LYAttachmentsViewControllerDelegate>
[NSString stringWithFormat:@"【%@】%@-%@", startAt, self.flowEventModel.orderTitle, self.flowEventModel.flowTitle];
NSDictionary *params = @{
@"uuid" : uuid ?: @"",
@"name" : objKey,
};
7.嚴(yán)格遵守項(xiàng)目中 100 的換行線答倡。
8.不可變數(shù)組和字典的書寫方法默蚌,每個(gè)元素都換行。 例如:
NSDictionary *params = @{
@"uuid" : uuid ?: @"",
@"name" : objKey,
@"mime" : mimeType,
@"size" : @(data.length),
@"bizType" : @(bizType)
};
NSArray *statuses2 = @[
@"全部狀態(tài)",
@"待分派",
@"進(jìn)行中",
@"待確認(rèn)完成",
@"已完成",
@"意外終止"
];
9.運(yùn)算符的書寫規(guī)范苇羡,運(yùn)算符和元素之間用空格隔開。例如:
a + b = c;
a ++;
a / b = c;
a % b = c;
10.關(guān)于判斷的書寫規(guī)范 例如:
BOOL isShow = NO鼻弧;
if (isShow) {
}
不推薦用下面幾種寫法:
if (isShow == YES) {
}
if (isShow == nil) {
}
11.對(duì)象的比較不推薦使用 == 设江,應(yīng)使用系統(tǒng)提供的方法進(jìn)行比較。 例如:
[a isEqualToString:c];
不推薦直接使用 a == c 進(jìn)行判斷
12.三元運(yùn)算符的使用如下:
a ?: @""
a ? b : @""
13.在知道數(shù)組元素類型情況下攘轩,請(qǐng)標(biāo)明數(shù)組中元素的類型叉存。
NSMutableArray <NSObject *> *arr;
14.復(fù)雜的判斷條件,盡量每一個(gè)條件寫一行度帮。例如:
if (job.JobState == JobState.New
|| job.JobState == JobState.Submitted
|| job.JobState == JobState.Expired
|| (job.JobTitle && job.JobTitle.length)) {
}
代碼規(guī)范
1.項(xiàng)目中發(fā)現(xiàn)沒有用的代碼或者文件歼捏,請(qǐng)直接刪除。
2.多用#pragma mark - xxx把方法分組笨篷,#pragma mark與下面的代碼之前不要空行瞳秽。
3.項(xiàng)目中出現(xiàn)警告,盡量消除警告率翅。
4.項(xiàng)目中多使用枚舉练俐,不要使用常量。
5.在類擴(kuò)展里面冕臭,不要重新類的方法腺晾。這樣會(huì)帶來(lái)意想不到的錯(cuò)誤。
6.單個(gè)的方法最好不要超過(guò)100行辜贵,如果超過(guò)請(qǐng)對(duì)方法內(nèi)容進(jìn)行拆分悯蝉。
7.每一個(gè)類的實(shí)現(xiàn)文件最好不要超過(guò)800行钮蛛,超過(guò)了漩绵,可考慮對(duì)該文件進(jìn)行重構(gòu)。
8.如果一個(gè)常量只有在這個(gè)類中使用到沙郭,可用static修飾榴芳。例如:
static const NSTimeInterval kAnimationDuration = 0.3;
9.在.h文件嗡靡,減少暴露在外的方法或者屬性。
10.屬性修飾符 字符串必須用copy窟感。
11.對(duì)象的初始化方法讨彼。盡量使用懶加載。(建議把懶加載的方法寫在最后柿祈,這樣我們可以直接把重點(diǎn)放在業(yè)務(wù)邏輯上)哈误。
12.項(xiàng)目中盡量少的使用tag哩至。
13.如果項(xiàng)目中的工具類,不能滿足你的需求蜜自,請(qǐng)使用的繼承的方式解決菩貌。盡量不要隨意修改公共類。
14.使用block的時(shí)候重荠,請(qǐng)檢查是否循環(huán)引用的問(wèn)題箭阶。
15.每個(gè)類里面的dealloc方法,寫在最上面戈鲁。這樣便于檢查該類是否正常釋放仇参。
16.盡量把重復(fù)的代碼,封裝成一個(gè)方法婆殿。如果要修改這個(gè)方法的時(shí)候只需要修改一個(gè)地方即可诈乒。
17.書寫代理方法的時(shí)候,代理的方法名要表明這個(gè)代理方法是做了什么事情婆芦。例如:- (void)tableView:didSelectRowAtIndexPath:
18.不要使用new方法來(lái)初始化對(duì)象怕磨。
19.公共類的接口要設(shè)計(jì)的簡(jiǎn)潔,滿足核心的功能就好了消约。不要設(shè)計(jì)很少會(huì)被用到肠鲫,但是參數(shù)極其復(fù)雜的 API 。如果要定義復(fù)雜的方法荆陆,使用類別或者類擴(kuò)展滩届。
20.盡量不要在.h文件那么導(dǎo)入其他的頭文件。
21.點(diǎn)語(yǔ)法常用來(lái)訪問(wèn)屬性被啼,不要用點(diǎn)語(yǔ)法來(lái)調(diào)方法帜消。
22.使用window的時(shí)候,通過(guò)下面的方式獲扰ㄌ濉:
正確的寫法:
[UIApplication sharedApplication].keyWindow.rootViewController
錯(cuò)誤的寫法:
self.window.rootViewController 因?yàn)槌绦蚩赡懿恢挂粋€(gè)window,self.window可能不是主窗口
23.建議加載xib,xib名稱用NSStringFromClass(),避免書寫錯(cuò)誤泡挺。
// 推薦寫法
[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([DXRecommendTagVCell class]) bundle:nil] forCellReuseIdentifier:ID];
// 不推薦寫法
[self.tableView registerNib:[UINib nibWithNibName:@"DXRecommendTagVCell" bundle:nil] forCellReuseIdentifier:ID];
注意事項(xiàng):
1.統(tǒng)一使用駝峰命名。
2.方法名的可讀性高命浴,避免命名沖突娄猫。
3.邏輯比較復(fù)雜的代碼,一定要寫注釋生闲。
4.封裝的控件一定要寫清楚注釋媳溺。最好能有一個(gè)使用說(shuō)明或者是使用案例。
5.公共的控件最好遵循單一職責(zé)原則碍讯。
6.項(xiàng)目中如果出現(xiàn)修改公共控件悬蔽,先考慮會(huì)影響的范圍。然后在跟相關(guān)人員協(xié)商后修改捉兴。
7.完成一個(gè)迭代版本的需求后蝎困,抽出時(shí)間來(lái)檢查新增的類是否存在內(nèi)存泄漏录语。
8.完成一個(gè)迭代版本的需求后,及時(shí)的整理本次迭代的文件(刪除不要的文件禾乘,把新增的文件歸類)