命名规范
1.项目中所有的类都以项目简称做为前缀(例如LY)。
2.项目中所有宏定义都以 小写字母 k 开头。
3.Model的名称和字段的名称,尽量跟服务器统一。
4.方法名不能使用get或者set开头。
5.BOOL属性应加 is 前缀。 例如:
@property (nonatomic, assign) BOOL isShow;
6.类方法以类名开头。 例如:
NSString stringWithFormat:<#(nonnull NSString *), ...#>
7.类扩展的命名规范。 例如:
#import "NSMutableURLRequest+LYExtension.h"
类扩展的方法名最好以扩展名的前几个字母开头 + 下划线
- (NSMutableURLRequest *)ly_authorizedURLRequest {
}
8.图片的命名规则 模块功能具体名字 例如 crm_customer_status
9.枚举的命名规范,以类名开头。 例如:
typedef NS_ENUM(NSUInteger, LYNewJumpType) {
LYNewJumpTypeNone = 0,
LYNewJumpTypeSystemMessage,
LYNewJumpTypeAnnouncemnt,
LYNewJumpTypeDiscussion,
LYNewJumpTypeBusinessCall
};
10.给一个对象命名时建议采用修饰+类型的方式,如果是数组则用单词复数表示。 例如:
UILabel *nameLabel; //name + label
NSMutableArray *scores;
书写规范
1.方法名的书写规范 - + 空格 + 返回值 + 方法名 + 空格 + {}。 例如:
- (void)loadSubViews {
}
2.带参数的方法名书写规范 后面的参数名都是小写 并且子参数名跟方法名一样(age:(NSInteger)age 例如:
- (void)initWithName:(NSString *)name age:(NSInteger)age {
}
3.对象的类型和基础类型的书写规范 例如:
NSString *name = @"小明";
NSInteger age = 12;
BOOL isShow = YES;
4.判断的书写规范,关键字 + 空格 + 判断条件 + 空格 + {} 例如:
if (YES) {
}
else if (YES) {
}
else {
}
5.属性的书写规范,关键字 + 空格 + 修饰符 + 空格 + 类型 + 空格 + 属性名。 例如:
@property (nonatomic, strong) NSMutableDictionary *clue;
6.写代码时,逗号后面都用空格隔开。而 : 的前后都要用空格隔开。 例如:
[NSString stringWithFormat:@"【%@】%@-%@", startAt, self.flowEventModel.orderTitle, self.flowEventModel.flowTitle];
NSDictionary *params = @{
@"uuid" : uuid ?: @"",
@"name" : objKey,
};
7.严格遵守项目中 100 的换行线。
8.不可变数组和字典的书写方法,每个元素都换行。 例如:
NSDictionary *params = @{
@"uuid" : uuid ?: @"",
@"name" : objKey,
@"mime" : mimeType,
@"size" : @(data.length),
@"bizType" : @(bizType)
};
NSArray *statuses2 = @[
@"全部状态",
@"待分派",
@"进行中",
@"待确认完成",
@"已完成",
@"意外终止"
];
9.运算符的书写规范,运算符和元素之间用空格隔开。例如:
a + b = c;
a ++;
a / b = c;
a % b = c;
10.关于判断的书写规范 例如:
BOOL isShow = NO;
if (isShow) {
}
不推荐用下面几种写法:
if (isShow == YES) {
}
if (isShow == nil) {
}
11.对象的比较不推荐使用 == ,应使用系统提供的方法进行比较。 例如:
[a isEqualToString:c];
不推荐直接使用 a == c 进行判断
12.三元运算符的使用如下:
a ?: @""
a ? b : @""
13.在知道数组元素类型情况下,请标明数组中元素的类型。
NSMutableArray *arr;
14.复杂的判断条件,尽量每一个条件写一行。例如:
if (job.JobState == JobState.New
|| job.JobState == JobState.Submitted
|| job.JobState == JobState.Expired
|| (job.JobTitle && job.JobTitle.length)) {
}
代码规范
1.项目中发现没有用的代码或者文件,请直接删除。
2.多用#pragma mark - xxx把方法分组,#pragma mark与下面的代码之前不要空行。
3.项目中出现警告,尽量消除警告。
4.项目中多使用枚举,不要使用常量。
5.在类扩展里面,不要重新类的方法。这样会带来意想不到的错误。
6.单个的方法最好不要超过100行,如果超过请对方法内容进行拆分。
7.每一个类的实现文件最好不要超过800行,超过了,可考虑对该文件进行重构。
8.如果一个常量只有在这个类中使用到,可用static修饰。例如:
static const NSTimeInterval kAnimationDuration = 0.3;
9.在.h文件,减少暴露在外的方法或者属性。
10.属性修饰符 字符串必须用copy。
11.对象的初始化方法。尽量使用懒加载。(建议把懒加载的方法写在最后,这样我们可以直接把重点放在业务逻辑上)。
12.项目中尽量少的使用tag。
13.如果项目中的工具类,不能满足你的需求,请使用的继承的方式解决。尽量不要随意修改公共类。
14.使用block的时候,请检查是否循环引用的问题。
15.每个类里面的dealloc方法,写在最上面。这样便于检查该类是否正常释放。
16.尽量把重复的代码,封装成一个方法。如果要修改这个方法的时候只需要修改一个地方即可。
17.书写代理方法的时候,代理的方法名要表明这个代理方法是做了什么事情。例如:- (void)tableView:didSelectRowAtIndexPath:
18.不要使用new方法来初始化对象。
19.公共类的接口要设计的简洁,满足核心的功能就好了。不要设计很少会被用到,但是参数极其复杂的 API 。如果要定义复杂的方法,使用类别或者类扩展。
20.尽量不要在.h文件那么导入其他的头文件。
21.点语法常用来访问属性,不要用点语法来调方法。
22.使用window的时候,通过下面的方式获取:
正确的写法:
[UIApplication sharedApplication].keyWindow.rootViewController
错误的写法:
self.window.rootViewController 因为程序可能不止一个window,self.window可能不是主窗口
23.建议加载xib,xib名称用NSStringFromClass(),避免书写错误。
// 推荐写法
[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([DXRecommendTagVCell class]) bundle:nil] forCellReuseIdentifier:ID];
// 不推荐写法
[self.tableView registerNib:[UINib nibWithNibName:@"DXRecommendTagVCell" bundle:nil] forCellReuseIdentifier:ID];
注意事项:
1.统一使用驼峰命名。
2.方法名的可读性高,避免命名冲突。
3.逻辑比较复杂的代码,一定要写注释。
4.封装的控件一定要写清楚注释。最好能有一个使用说明或者是使用案例。
5.公共的控件最好遵循单一职责原则。
6.项目中如果出现修改公共控件,先考虑会影响的范围。然后在跟相关人员协商后修改。
7.完成一个迭代版本的需求后,抽出时间来检查新增的类是否存在内存泄漏。
8.完成一个迭代版本的需求后,及时的整理本次迭代的文件(删除不要的文件,把新增的文件归类)