iOS干货iOS开发精华归档iOS应用框架

代码规范

2019-08-09  本文已影响0人  senpaiLi

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

一、命名规则

官方规则:Cocoa代码指南

1、总则
应该: setBackgroundColor
不应该:setBkgdColor

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

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

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

MWBaseViewController、MWOrderListCell、MWSuggestTextView...
应该:- (void)updateListData:(NSDictionary *)data;
不应该:- (void)update:(NSDictionary *)data;
@property (assign, getter=isEditable) BOOL editable;
3、枚举命名规则

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

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

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

4、常量命名规则
      const float kMaxHeigh = 100.f;
      const int kNumberCount = 100;
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的使用,尽量减少拉约束的情况
#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、分支管理
2、项目内环境配置(APPInfo管理)

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

APPIsDev():

其他

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

上一篇下一篇

猜你喜欢

热点阅读