1.命名
1.1 类的命名
- 含义清楚,尽量做到不需要注释也能了解其作用,若做不到,就加注释
-
大驼峰式命名每个单词的首字母都采用大写字母
- 例1:STDeviceModel
- 例2:STUserInfoController ,Controller 建议省略View,
- 例3:STSetView
- 例4:STUserCell,tableViewCell,建议省略tableView
- Protocol: 使用Delegate或者DataSource作为后缀
- UI控件依次类推
1.2 私有变量
- 小驼峰式命名:第一个单词以小写字母开始,后面的单词的首字母全部大写
- 例子: firstName、lastName
- @property (nonatomic, copy) NSString *userName;请在,类明后面加一个空格符
- 建议使用self.方式调用,统一风格
1.3 宏命名
全部大写,单词间用 _分隔[不带参数]
#define THIS_IS_AN_MACRO @"THIS_IS_AN_MACRO"
以字母k开头,后面遵循大驼峰命名[不带参数]
#define kWidth self.frame.size.width
小驼峰命名[带参数]
#define getImageUrl(url) [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",kBaseUrl,url]]
2.注释
- 最好的代码是不需要注释的(夸张了) 尽量通过合理的命名
- 良好的代码把含义表达清楚 在必要的地方添加注释
- 注释需要与代码同步更新
- 如果做不到命名尽量的见名知意的话,就可以适当的添加一些注释或者mark
2.1 属性注释,统一风格即可
//<方式一>
///设备名
@property (nonatomic, strong) UILabel *deviceNameLabel;
//<方式二>
@property (nonatomic, strong) UILabel *deviceNameLabel;//设备名
2.1 方法声明注释
- 方法的作用,参数含义必须说清楚
/// 国标设备名称修改
/// @param param @{@"gbDeviceId":@"*", @"deviceName":@"*"}
/// gbDeviceId String 国标设备id 是
/// deviceName String 设备名称 是
/// @param block 网络请求成功的block
+ (void)modifyNameGB:(NSDictionary *)param fetchValueBlock:(FetchValueBlock)block;
3.UI布局
- 新增的功能不允许使用Xib
- 建议Mansory布局,允许少量的frame使用(固定样式的使用)
- 老代码,请在空闲的整理,或删除Xib
4. 格式化代码
- 代码书写 *, =, [, ],参考如下方
UITableView *table = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
table.dataSource = self;
table.delegate = self;
table.scrollEnabled = NO;
table.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);
[self.view addSubview:table];
- 方法的声明和定义
- 在- 、+ 和 返回值 之间留一个空格,一行显示不下,请在每个参数后换行
- 调用多参数函数,一行显示不下,请在每个参数后换行。
//单行
- (UITableViewCell *)getCellWithTable:(UITableView *)tableView;
//多行
- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString
parameters:(nullable id)parameters
headers:(nullable NSDictionary <NSString *, NSString *> *)headers
progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress
success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;
- 方法的实现行数控制
- 避免超长函数体,控制在一屏幕可以显示的下。显示不下,按逻辑块拆分。
- 控制函数单一职责,即叶子函数。
- 单个文件代码行数控制在1000行以内,超出抽取工具类,分类等