iOS代码规范(OC和Swift)

下面说下iOS的代码规范问题,若是你们以为还不错,能够直接用到项目中,有不一样意见 能够在下面讨论下。xcode

相信不少人工做中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button一、button二、button3,全文没有注释,去看代码逻辑才能知道这三个按钮的意思,我也是醉了!微信

下面的规范 有的定的比较死,你们能够根据本身团队的风格进行修改。该文章主要是OC的代码规范,有几个是Swift的规范。网络

OC和Swift的代码规范以下:ide

1、VC生命周期 模块排列顺序

一、 注意svn

#pragma mark -(加横线)是用来 区分大模块的,首字母要大写。函数

#pragma mark(不加横线)是标注 小模块的, mark与函数第一行不要有空行,没有的模块不用写mark。spa

二、基本标准调试

#pragma mark - Life Cycle日志

viewDidLoad前的代码规范

viewDidLoad

viewDidLoad后的

dealloc

#pragma mark - (系统提供的delegate)

#pragma mark - (自定义的delegate)

#pragma mark - (第三方的delegate)

#pragma mark - Event response // 这里主要放IBAction,通知,gesture等

#pragma mark - Public method

#pragma mark - Private method

#pragma mark - Getters and Setters

三、项目中经常使用到的

#pragma mark - Life Cycle

#pragma mark - Override

#pragma mark - UITableViewDelegate

#pragma mark - CustomDelegate

#pragma mark - Event Response

#pragma mark - Public Methods

#pragma mark - Getters and Setters

2、VC里都要 加入 dealloc 方法

若是退出该页面,没有执行dealloc 方法,就是存在内存泄露的问题,因此都加上dealloc方法,并打印日志。养成习惯。

3、控件统一后缀名

一、经常使用的后缀名规则

除了下面几个进行浓缩,其余的只去掉UI 就能够了(如UITextField写成:TextField):

UIButton :Btn

UILabel :Lbl

UITableViewCell :Cell

Image :Img

UIViewController: VC

UITableViewController :TableVC

二、其余

2.一、新建一个UIViewController 文件 后缀要 ViewController

2.二、新建一个UITableViewController 文件后缀要 ViewController

2.三、多个tag :用 枚举 定义, 后缀:Tag

4、统一方法名

这个规范是为了你们看每一个页面,一看就知道那个方法是作什么的,每一个团队都应该根据本身的特色来定制。

若是团队中有几我的的命名很不规范(写的方法名都看不懂),就须要按这条进行统一命名。若是团队的成员都能很好的命名 这条就能够省略。

一、初始化全部控件 统一一个方法名:initAllView

二、初始化数据 的方法名:initData

三、请求网络,统一方法名前缀

vc 里 只有一个网络请求::loadNetData

多个 加后缀:load****NetData

四、网络层的类加后缀: ***Request

五、Model 都要加后缀Model。。

六、点击事件的前缀:tap

5、文件#import和@end

一、import规整顺序, @end后留1个回车位置, @end前最后一个函数空1行

二、先 import类自己.h 再<>,以后”",include写在一块儿

#import “AppDelegate.h"

#import <arpa/inet.h>

#import "OpenUDID.h"

6、换行与括号

一、多个协议名称过长不用换行 依靠xcode自动伸缩。

二、方法 没有参数或参数在一行,后面括号 不要换行,如:- (id)responseObject {。

方法有多个参数,参数换行,括号换行,如:

- (AFHTTPRequestOperation *)PUT: (NSString *)URLString
             parameters:(id)parameters
                success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure

{
}

 

7、@property规范

一、weak , copy的使用要多注意, NSArray ,NSdictionary, NSString 属性定义尽可能用copy,这是为了防止赋值给它的是可变的数据,若是可变的数据发生了变化,那么该property也会发生变化。

二、变量先按功能分类摆放再按类型摆放,可考虑右对齐

8、Define模块

一、每一个define按模块分类后, 照字母天然顺序排序

9、Typedef的规范

能够多选判断的时候要用下面的格式:

typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) {
    SDWebImageRetryFailed = 1 << 0,
    SDWebImageLowPriority = 1 << 1,
    SDWebImageCacheMemoryOnly = 1 << 2,
    SDWebImageProgressiveDownload = 1 << 3,
    SDWebImageRefreshCached = 1 << 4,
    SDWebImageAvoidAutoSetImage = 1 << 11
};

 

10、经常使用命名规则

一、 类,方法命名

类名首字母大写,方法首字母小写,方法中的参数首字母小写,第二个参数名开始不要加"with", -, +号后面由一个空格

同时尽可能让方法的命名读起来像一句话,可以传达出方法的意思

同时取值方法前不要加前缀“get”

手势带"tapGesture"、"tap"相似的,通知前缀"notification"、“note”相似的, 后面不用带_

二、变量命名

意思完整性, 变量的命名btn, img类型在特征词最后,如 softBtn, homeVc, redImg

三、图片目录和命名

btn按钮的图,默认按下高亮为普通状态图片名称最后带上后缀 “_h"

一级目录(功能)_二级目录(是btn仍是img)_三级目录(特征),如goodlist_btn_greenArrow

11、调试用法

一、TODO

临时处理方案或者未作的实现 加TODO。

二、NSAssert

使用断言NSAssert来跟踪异常: NSAssert(theDate != nil, @"Argument must be non-nil”);

三、Instruments

检查本身模块的内存、占用时间、CPU、GPU等使用状况。

12、要注意的

一、初始化”id" 写成 "instancetype"

二、int 用NSInteger,float用CGFloat

三、”:" 后别加空格, 函数第一个大括号不要换行

四、static const NSString * kLNasss = @""";

五、只要出现“,” 后面确定要写一个空格

六、注释灵活处理,复杂方法须要解释清楚

七、无关的方法,变量都放到.m里

八、尽可能别直接使用数字,字符串赋值,除非后面带上说明该值来历

九、 固定 的 字符串、数字 。若是 只有一处用了,就写死。尽可能 注释。

若是一个页面用屡次,就在这个页面定义 define

若是多个页面 使用(多个地方 须要同时修改) 就定义成常量

十、if else 的问题。

//这里写总体的注释

if () {

} else { //这里写不写都行

}

 

十3、使用block要注意循环引用

虽然局部变量大多数里面的self不用weak也不会引发循环引用(tableview展现cell的时候例外cellForRowAtIndexPath),可是仍是推荐你们都加上__weak。

十4、reviewboard的使用流程

先打diff、再把diff 提交 reviewboard、 再提交svn(打标签的时候带CR:版本)

十5、重要的公用功能 .h 用的注释格式:

/**
*
*
*/

 

这样写能够用快捷键查看注释的内容 ,通常的不用这样写。。

十6、scrollViewDidScroll

重写 scrollViewDidScroll 方法的页面 ,要在dealloc中将scrollview.delegate = nil 。。不然 点击返回键会崩溃。 iOS 9 修复了 scrollViewDidScroll崩溃的问题。

十7、Swift文件里 打印日志 用print, 必定不能用NSLog

由于Swift 用NSLog 会记录到系统日志,能够被黑客获取。

用宏定义来屏蔽release环境下的NSLog日志输出 对 Swfit是没用的。

 

欢迎关注 今日头条号 名称: 云端梦想科技  

欢迎关注 微信公众号:dreams2999

相关文章
相关标签/搜索