代码规范

通过建立代码编写规范,形成iOS开发团队编码约定,提高程序的可靠性、可读性、一致性、可维护、可扩展,保证程序代码的质量。提高程序的重用性,使开发人员之间的工作成果可以共享。

一、命名规则

官方规则:Cocoa代码指南

1、总则
  • 简洁
    简单明了,尽量使用全拼
应该: setBackgroundColor
不应该:setBkgdColor

当然,我们也会有一些常用的缩略词,比如 info 代表 Information等(待补充)

  • 一致性
    作用相同,或者在表达同一件事时,统一命名。
    比如位置存储信息 location,不要再出来place表示位置的情况。

  • 无自引用

应该:nameString
不应该:nameStringObject
2、一般类、属性、方法命名

遵守驼峰命名法,类名首字母大写,方法名和属性首字母小写(首字母为缩略词,如WWDC时除外)

  • 类名需要加前缀,前缀一般为:“项目关键词”+“模块关键词”
    如短信需求,前缀应该为“MGSMS”(现在是FB,因为之前项目名为5Ber)
    以类型为结尾,如:
MWBaseViewController、MWOrderListCell、MWSuggestTextView...
  • 方法命名:参数前要加描述词
应该:- (void)updateListData:(NSDictionary *)data;
不应该:- (void)update:(NSDictionary *)data;
  • 私有变量应该尽可能代替实例变量的使用。尽管使用实例变量是一种有效的方式,但更偏向于使用属性来保持代码一致性。
    属性get忽略 is前缀,建议如下写法:
@property (assign, getter=isEditable) BOOL editable;
3、枚举命名规则

枚举名同类名规则,加前缀,大驼峰命名
枚举值去掉前缀,大驼峰命名

    typedef NS_ENUM(NSInteger, FBSMSControllerSelectType) {
        ControllerSelectTypeOne,
        ControllerSelectType..,
    };

多用枚举控制多态,减少bool值等去判断的情况,增加可读性

4、常量命名规则
  • 以const修饰一个常量,一般是写在.h文件中,然后将.h的头文件加入预编译pch文件中,以小写字母k开头,后面单词遵循"驼峰原则"命名。例如:
      const float kMaxHeigh = 100.f;
      const int kNumberCount = 100;
  • 如果是特殊含义的常量,声明形式为"各APP前缀+名称",形式如下:
const NSString *FB*** = @"xx"

宏定义
宏定义在很多方面都会使用,例如定义高度、工具类,还有诸如文件路径。宏定义的命名,需要传参数的时候使用前缀,比如"FB":

#define FB***
二、代码格式化
  • 文件夹规范
Mogo
- Main:主流程页面代码
   - Home:
      - subModule
         Controller
         server
         - Model
         - View
   - iVoice:
   - ...
- Common:通用代码(自己封装的一些UI库之类的)
   - Customer
   - Tool
   - FBAnalytics
   ...
- Vender:拉进来的代码库
- Resource:资源文件
- Other:全局文件

Products:应用程序
Pods:pod管理
Frameworks:手动拉入的代码库
  • 常用规范
- 运算符前后前后各一个空格
- *号紧贴属性名,和类名之间隔一个空格
NSString *text = @"hello world";

- 括号前后各一个空格
- 属性修饰符和前面的,隔一个空格
@property (nonatomic, strong) UITableView *tableView;

- 当参数过长的时候,没个参数占用一行,且按照冒号对齐。
- 在声明类方法或者实例方法的时候,“+”或者“-”和返回值之间保留一个空格,
且返回值和方法名的第一个字母之间不要留空格。
-(void)doSomethingWithName:(NSString *)name
                      rect:(CGRect)rect;

- 注释一般放在.h,.m文件尽量减少注释
单行的用//+空格开头,多行的采用/* */注释
//TODO:  用来注释没有完成的功能
#warning 用来标记自己的debug修改,以免遗漏

哪里需要注释:
1. 在某个变量、属性、或者方法不能够直接从名字得知其用途时。 
2. 区分代码区时(在常量文件和控制器类的.h文件和.m文件里)。 
3. 在不相关的业务处理交叉点。
4. 文件的基本信息
5. 有疑惑的地方(FIXME)
6. 未完成或者待优化的地方。(#waring //TODO:) 
7. 声明枚举时应该对每个值说明。
8. 修改别人代码的时候。
9. 编写API时,一般需要对所有的接口和属性带上注释
注释需要注意:
1. 不要为了注释而注释,请只在关键点注释
2. 划分代码块最好的方式不一定是注释,有时候使用空行也可以达到很好的效果。

-  初始化
在初始化方法中,不要将变量初始化为“0”或“nil”,那是多余的,
 内存中所有的新创建的对象(isa除外)都是0,所以不需要重复初始化 为 “0”或“nil”;
对nil的检查
仅在有业务逻辑需求时检查nil,而非为了防止崩溃。

- 组件的创建,应该使用代码块或者懒加载的方式(我习惯用代码块)

- 建议项目统一使用Masonry的方式布局。不允许出现直接设置frame的情况。
xib的使用,尽量减少拉约束的情况
  • controller代码结构
#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{}
  • 排版格式
- 尽量使用.语法
应该:array.count      
不应该:[array count]

多使用黄金路径
- (void)someMethod {
    if(error) {
        return;
    }
    doSomething
}

而不是:
- (void)someMethod {
    if(!error) {
        doSomething
    }
}

多使用三目运算符:
result = a > b ? x : y;

三、git版本控制
1、分支管理
  • 只允许从dev分支拉出新的分支
  • 其他分支只和dev分支做合并
  • 提交代码时,确保本地build success
  • 项目测试结束之后,即定档之后,才合并到master分支
  • 项目提测需要打tag
2、项目内环境配置(APPInfo管理)

三种项目渠道,主要是为了在统计和crash收集时作区分,以便更好地定位

  • fir:即平时我们打包到fir的环境,测试证书,release环境
  • beta:testflight版本,正式证书,release环境
  • appstore:testflight版本,正式证书,release环境

APPIsDev():

其他

1、尽量减少IO的操作,优先使用内存保存
不要出现存储传值的情况
2、数据量较大的操作,放到子线程处理
3、数据处理从代码中抽离出来,我一般的习惯是一个控制器一个server,数据处理放到server中
4、如何封装代码??

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 前言 说是前言,其实也是本文诞生的目的。随着公司业务的不断增加,功能的快速迭代,app的业务线越来越多,代码体积变...
    Yealink阅读 5,273评论 0 13
  • 前言 说是前言,其实也是本文诞生的目的。随着公司业务的不断增加,功能的快速迭代,app的业务线越来越多,代码体积变...
    梦翔_d674阅读 1,487评论 0 2
  • 前言说是前言,其实也是本文诞生的目的。随着公司业务的不断增加,功能的快速迭代,app的业务线越来越多,代码体积变得...
    Mr_yinwei阅读 640评论 0 0
  • 约定 在我看来,开发规范像是一条可供参考的标准线。不同开发者可以根据这条标准线来规范自己的开发行为,尤其是在大的项...
    xxzsxxzs阅读 615评论 1 0
  • 推荐文章:禅与 Objective-C 编程艺 前言 为􏰀高产品代码质量,指导广大软件开发人员编写出简洁、可维护、...
    WolfTin阅读 2,749评论 0 1