iOS架构

iOS开发规范(OC,详细版)

2021-01-13  本文已影响0人  iOS_林亦辰

前言


本文是作者参考自己的部分代码规范和网上众多其它小伙伴的代码规范,整理和写出的。
规范涵盖了很多内容,阅读的小伙伴多点耐心哈。
By:申自礼

目的


为了利于项目维护以及规范开发,促进成员之间Code Review的效率,故提出以下开发规范,如有更好的建议,欢迎提出。
本文档的预期读者包括:iOS开发人员。

命名规范


代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。正确的英文拼写和语法可以让阅读者易于理解,避免歧义。
*注意:即使纯拼音命名方式也要避免采用。但alibaba、taobao、youku、shanghai等国际通用的名称,可视同英文.

大驼峰规则:每个单词的首字母大写。例:NameTextField。
小驼峰原则:第一个单词首字母小写,其余都大写。例:nameTextField。

项目命名 && 文件命名

项目名和文件名都遵循大驼峰命名。例如:CWBusinessZongBuCarWins-Group

Bundle Identifier 命名

Bundle Identifier:采用反域名命名规范,以域名后缀(小写com)+公司顶级域名(小写carwins)+应用名(总部ZongBu驼峰命名方式)形式命名,例如:com.carwins.ZongBu

类名

类的命名都遵循大驼峰命名。一般是:前缀 + 功能 + 类型。例如:CW + Login + ViewController

在实际开发中,一般都会给工程中所有的类加上属于本工程的前缀。

常用控件类命名类型对照表(下表中前缀为:CW,如果用到下表中没有列举出来,请去掉UI首字母,遵循实际规则即可。)

控件名 类型 示例
UIViewController ViewController、VC CWBaseViewController
UView View CWBaseView
UITableView TableView CWOrderTableView
UITableViewCell Cell CWOrderListCell
UIButton Button、Btn CWSuccessButton
UILabel Label、Lab CWSuccessLabel
UIImageView ImgView CWGoodsImgView
UITextField TextField CWNameTextField
UITextView TextView CWSuggestTextView

其它类相关对照表

功能 类型 示例
工具类 Tool CWOrderTool
代理类 Delegate CWOrderListDelegate
管理类 Manager CWOrderListModel
模型类 Model CWOrderListModel
Service类 Service CWOrderService
布局类 Layout CWHomeLayout
数据库类 DataBase、表名+DBHelper CWFriendDataBase、CWUserTableDBHelper
类目 XXX+(范围,例如Extension, Additions 或者功能,例如Frame,Nib,Block) CWUIButton+Additions、CWUIButton+Block

UIViewController请按照如下分类

#pragma mark - life cycle
#pragma mark - event response
#pragma mark - UITableViewDelegate && UITableViewDataSource
(代理顺序往下排列)
#pragma mark - getters and setters
#pragma mark - private

注意:所有视图或者对象的创建请尽量使用懒加载,调用的时候全部使用self.textBtn这样的方式。如果是确定的不可变数组、字典,可直接给定数组中的元素。(getters and setters分类中,懒加载可出现_调用对象,其它情况请遵循self.调用原则)

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic, strong)UIButton * textBtn;
@end

@implementation ViewController

#pragma mark - life cycle
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view addSubview:self.textBtn];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
#pragma mark - private 

#pragma mark - event response

#pragma mark - UITableViewDelegate && UITableViewDataSource
//(代理顺序往下排列)

#pragma mark - CTAPIManagerCallBackDelegate

#pragma mark - getters and setters
- (UIButton *)textBtn
{
    if (_textBtn == nil) {
        _textBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        _textBtn.frame = CGRectMake(300, 250, 100, 100);
        _textBtn.backgroundColor = [UIColor yellowColor];
        _textBtn.titleLabel.text = @"text";
        [_textBtn addTarget:self action:@selector(text) forControlEvents:UIControlEventTouchUpInside];
    }
    return _textBtn;
}
@end

变量和方法

变量和方法的命名都遵循小驼峰命名。例如:textVariableStr, - (void)textAction响应事件。
变量命名对照表(如果用到下表中没有列举出来,请去掉UINS遵循实际规则即可。或者一看就知道的通用简写)
方法命名对照表(方法多为动词或动名词)

功能 示例
- (id)initXX 初始化相关方法,使用init为前缀标识,如初始化布局- (id)initView
- (BOOL)isXX 方法返回值为boolean型的请使用is前缀标识
- (UIView *)getXX 返回某个值的方法,使用get为前缀标识
- (void)setXX 设置某个属性值或者相关数据
- (void)updateXX 更新数据
- (void)saveXX 保存数据
- (void)drawXX 绘制相关,使用draw前缀标识
- (void)clearXX 清除数据
- (void)XXXAction 响应事件,使用Action为后缀标识
- (void)loadData 加载数据(一般情况下VC中都会有这个方法)
- (void)loadMoreData 加载更多数据
- (void)setupUI 加载布局(一般情况下VC中都会有这个方法)

常量

宏:小写k+大驼峰 即为:#define kUserAgeKey @“ageKey”
全局常量:工程前+缀全大写,下划线隔开 即为:extern const NSString CW_USER_AGE_KEY

参数名

参数名以小驼峰命名,尽量参考苹果原生方法风格编写。尽量可读性好,看到方法名就知道这个方法是用来干什么的。参数应该避免用单个字符命名。例:- (void)setDataImageUrl:(NSString *)imageUrl name:(NSString *)nameStr content:(NSString *)contentStr

资源文件规范


资源文件命名

全部小写,采用下划线命名法,加前缀区分。所有的资源文件都需要加上工程前缀(小写形式)
命名模式:可加后缀_small表示小图,_big表示大图,逻辑名称可由多个单词加下划线组成,采用以下规则:
用途_模块名_逻辑名称
用途_模块名_颜色
用途_逻辑名称
用途_颜色

说明 前缀(工程前缀示例CW) 示例
按钮相关 cw_btn_ cw_btn_home_normal、cw_btn_red,cw_btn_red_big
背景相关 cw_btn_ cw_bg_home_header、cw_bg_main
图标相关 cw_ic_ cw_ic_home_location、cw_bg_input
分割线相关 cw_div_ cw_ic_home_location、cw_bg_input
默认相关 cw_def_ cw_ic_home_location、cw_bg_input

文件夹命名

创建文件夹最好创建实体文件夹,找到工程目录,创建相应文件夹并拖入工程。文件夹命名使用相应模块结构分层的英文,首字母要大写。例:ModelViewControllerToolOtherService等等。

版本规范


采用A.B.C 三位数字命名,比如:1.0.2,当有版本更新的时候,依据下面的情况来确定版本号规范。

版本号 说明 示例
A.b.c 属于重大更新内容 1.0.2 -> 2.00
a.B.c 属于小部分更新内容 1.0.2 -> 1.2.2
a.b.C 属于补丁更新内容 1.0.2 -> 1.0.4

第三方库规范


希望Team能用时下较新的技术,对开源库的选取,一般都需要选择比较稳定的版本,作者在维护的项目,要考虑作者对issue的解决,以及开发者的知名度等各方面。选取之后,一定的封装是必要的。

项目使用cocoapods统一管理开源第三库文件,不需要手动导入和手动添加依赖库。如果第三方不支持cocoapods,可手动导入工程。安装cocoapods请移步这里cocoapods安装

注释规范


为了减少他人阅读你代码的痛苦值,请在关键地方做好注释。

类注释

//
//  MyViewController.m
//  text
//
//  Created by 林亦辰 on 2017/2/22.
//  Copyright © 2017年 iOSShen. All rights reserved.
//

该注释是自动生成的,在xcode中设置即可。Created by 电脑用户名on 创建该文件的时间。Copyright 2017 后面的名字和邮箱是自己填写和设置的。具体可在xcode工程,Project Document中设置。这样便可在每次新建类的时候自动加上该头注释。

方法注释

方法注释,方法外部统一用option + command + /,方法内部统一用//注释。

/**
 测试
 */
- (void)text
{
    //测试按钮事件响应
}

模型注释

每个model中的,包含的每个属性,都必须要写上相对应的注释,用///注释。阅读者一看这个model,就清楚知道model中的每个字段代表的意思,用来做什么事情的。

@interface DeliveryModel : NSObject
///提货劵所在商圈id
@property (nonatomic, assign) long long mallId;
///商圈全称
@property (nonatomic, copy) NSString *mallFullName;
///商圈简称
@property (nonatomic, copy) NSString *mallShortName;
///提货劵号
@property (nonatomic, copy) NSString *credentialsCode;
///总金额
@property (nonatomic, assign) NSInteger totalAmount;
///提货劵所在店铺id
@property (nonatomic, assign) long long storeId;
///货劵所在店铺名称
@property (nonatomic, copy) NSString *storeName;
///提货劵id
@property (nonatomic, strong) NSNumber *credentialsId;
///状态:0:未提货、1:已提货、2:已分享、3:已退款
@property (nonatomic, assign) NSInteger state;
///提货商品(以下为提货商品参数)
@property (nonatomic, strong) NSArray<DeliveryGoodslist *> *goodsList;
///二维码
@property (nonatomic, copy) NSString *qrCode;
///商品总个数
@property (nonatomic, assign) NSInteger goodsCount;
@end

如果不是model的属性,是其它类属性,需要注释,请按照model属性注释方式。

编码规范


@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) DeliveryModel *delivery;
@property (nonatomic, strong) DeliveryLookAdapter *lookAdapter;
@property (nonatomic, strong) DeliveryLookAPIManager *lookManager;

其它规范


上一篇下一篇

猜你喜欢

热点阅读