一. 项目结构
1.整体结构

2.主要模块结构

3.模块结构

二.代码风格
1 类名
* 类名使用驼峰命名,比如 LTHomeOrderVC
* 创建子类,把代表子类的特点部分放在前缀和父类名的中间
比如:
LTHomeVC (父类)
LTTimeHomeVC (子类)
* 在类.h文件尽量少引用其他头文件(可以减少编译时间)
可以在.h文件中使用 @class 类名; 在.m文件中 使用 #import "类名"
2 属性
* 对外的属性,尽量使用不可变对象(对外公布的属性设置为只读readonly,在.m文件内部设置为读写readwrite)
比如


* 属性应该尽可能表述性地命名,避免缩写,且是小写字母开头的驼峰命名
* 最好能做好见名知其意
* 一个变量有且只有一个功能,尽量不要把一个变量用作多种用途
* 变量的名称必须同时包含功能与类型

3 条件表达式
* 条件过多,过长的时候需要换行,为了代码看起来整齐

* 每个分支的实现必须使用{}包含
* 条件判断的时候应该是变量在左,条件在右
* 在一个代码块里面有可能的情况时,善于用return来结束异常情况
* switch 语句后面 default分支必须存在,除非是在对枚举进行switch
4 方法
* 方法与方法之间间隔一行
* 方法最后面的括号需要另起一行,遵循apple的规范,对于其他场景的括号,括号不需要单独换行。比如if的
* 如果方法参数过多过长,建议多行书写,用冒号进行对齐。

* 一个方法内的代码最好保持在50行代码以内,过多会导致阅读体验差
* 一个函数只做一件事,做到单一原则。所有的类、方法设计好后就可以类似搭积木一样实现一个系统
* 对于有返回值的函数,且函数内有分支情况,得确保每个分支都有返回值
* 多个函数如果有逻辑重复的代码,建议将重复的部分抽取出来,成为独立的函数进行调用
* 函数如果有过个参数,外部传入的参数需要检查参数的非空、数据类型的合法性,参数错误做一些措施:立即返回、断言
5 控制器的方法及顺序

6 宏定义
* 尽量少用宏定义来定义具体类型的数据,使用 static NSString *const LT_Map_Key_Name = @"LT_Map_Key_Name";
7 图片资源命名
* 项目标识+模块名称+功能+icon 比如: LT_Home_Order_Tap_icon
8 版本规范
*采用A.B.C 三位数命名 比如: 1.4.0
说明:重大版本增加A的数值,大版本增加B的数值,小版本更新增加C的数值
* iOS适配到iOS8 (虽说现在已经很少有iOS8了)
9 其他注意事项
* 数组的遍历尽量不要用for,用

* NSInteger类型的字段,最好抽取一个枚举类型

* 多个网络请求,采用并发异步网络请求
* 通知、timer、avplayer使用后,记得销毁
* block循环问题,记得打破循环
* 多变量操作,用完即毁的,记得套一层 @autoreleasepool,及时释放变量内存
网友评论