iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下。
相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button1、button2、button3,全文没有注释,去看代码逻辑才能知道这三个按钮的意思,我也是醉了!
下面的规范 有的定的比较死,大家可以根据自己团队的风格进行修改。该文章主要是OC的代码规范,有几个是Swift的规范。
OC和Swift的代码规范如下:
一、VC生命周期 模块排列顺序
1、 注意
#pragma mark -(加横线)是用来 区分大模块的,首字母要大写。
#pragma mark(不加横线)是标注 小模块的, mark与函数第一行不要有空行,没有的模块不用写mark。
2、基本标准
#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
3、项目中常用到的
#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
二、VC里都要 加入 dealloc 方法
如果退出该页面,没有执行dealloc 方法,就是存在内存泄露的问题,所以都加上dealloc方法,并打印日志。养成习惯。
三、控件统一后缀名
1、常用的后缀名规则
除了下面几个进行浓缩,其他的只去掉UI 就可以了(如UITextField写成:TextField):
UIButton :Btn
UILabel :Lbl
UITableViewCell :Cell
Image :Img
UIViewController: VC
UITableViewController :TableVC
2、其他
2.1、新建一个UIViewController 文件 后缀要 ViewController
2.2、新建一个UITableViewController 文件后缀要 ViewController
2.3、多个tag :用 枚举 定义, 后缀:Tag
四、统一方法名
这个规范是为了大家看每个页面,一看就知道那个方法是做什么的,每个团队都应该根据自己的特点来定制。
如果团队中有几个人的命名很不规范(写的方法名都看不懂),就需要按这条进行统一命名。如果团队的成员都能很好的命名 这条就可以省略。
1、初始化所有控件 统一一个方法名:initAllView
2、初始化数据 的方法名:initData
3、请求网络,统一方法名前缀
vc 里 只有一个网络请求::loadNetData
多个 加后缀:load****NetData
4、网络层的类加后缀: ***Request
5、Model 都要加后缀Model。。
6、点击事件的前缀:tap
五、文件#import和@end
1、import规整顺序, @end后留1个回车位置, @end前最后一个函数空1行
2、先 import类本身.h 再<>,之后”",include写在一起
#import “AppDelegate.h"
#import <arpa/inet.h>
#import "OpenUDID.h"
六、换行与括号
1、多个协议名称过长不用换行 依靠xcode自动伸缩。
2、方法 没有参数或参数在一行,后面括号 不要换行,如:- (id)responseObject {。
方法有多个参数,参数换行,括号换行,如:
- (AFHTTPRequestOperation *)PUT: (NSString *)URLString
parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure {
}
七、@property规范
1、weak , copy的使用要多注意, NSArray ,NSdictionary, NSString 属性定义尽量用copy,这是为了防止赋值给它的是可变的数据,如果可变的数据发生了变化,那么该property也会发生变化。
2、变量先按功能分类摆放再按类型摆放,可考虑右对齐
八、Define模块
1、每个define按模块分类后, 照字母自然顺序排序
九、Typedef的规范
可以多选判断的时候要用下面的格式:
typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) {
SDWebImageRetryFailed = 1 << 0,
SDWebImageLowPriority = 1 << 1,
SDWebImageCacheMemoryOnly = 1 << 2,
SDWebImageProgressiveDownload = 1 << 3,
SDWebImageRefreshCached = 1 << 4,
SDWebImageAvoidAutoSetImage = 1 << 11
};
十、常用命名规则
1、 类,方法命名
类名首字母大写,方法首字母小写,方法中的参数首字母小写,第二个参数名开始不要加"with", -, +号后面由一个空格
同时尽量让方法的命名读起来像一句话,能够传达出方法的意思
同时取值方法前不要加前缀“get”
手势带"tapGesture"、"tap"类似的,通知前缀"notification"、“note”类似的, 后面不用带_
2、变量命名
意思完整性, 变量的命名btn, img类型在特征词最后,如 softBtn, homeVc, redImg
3、图片目录和命名
btn按钮的图,默认按下高亮为普通状态图片名称最后带上后缀 “_h"
一级目录(功能)_二级目录(是btn还是img)_三级目录(特征),如goodlist_btn_greenArrow
十一、调试用法
1、TODO
临时处理方案或者未做的实现 加TODO。
2、NSAssert
使用断言NSAssert来跟踪异常: NSAssert(theDate != nil, @"Argument must be non-nil”);
3、Instruments
检查自己模块的内存、占用时间、CPU、GPU等使用情况。
十二、要注意的
1、初始化”id" 写成 "instancetype"
2、int 用NSInteger,float用CGFloat
3、”:" 后别加空格, 函数第一个大括号不要换行
4、static const NSString * kLNasss = @""";
5、只要出现“,” 后面肯定要写一个空格
6、注释灵活处理,复杂方法需要解释清楚
7、无关的方法,变量都放到.m里
8、尽量别直接使用数字,字符串赋值,除非后面带上说明该值来历
9、 固定 的 字符串、数字 。如果 只有一处用了,就写死。尽量 注释。
如果一个页面用多次,就在这个页面定义 define
如果多个页面 使用(多个地方 需要同时修改) 就定义成常量
10、if else 的问题。
//这里写整体的注释
if () { } else { //这里写不写都行 }
十三、使用block要注意循环引用
虽然局部变量大多数里面的self不用weak也不会引起循环引用(tableview展示cell的时候例外cellForRowAtIndexPath),但是还是推荐大家都加上__weak。
十四、reviewboard的使用流程
先打diff、再把diff 提交 reviewboard、 再提交svn(打标签的时候带CR:版本)
十五、重要的公用功能 .h 用的注释格式:
/**
*
*
*/
这样写可以用快捷键查看注释的内容 ,一般的不用这样写。。
十六、scrollViewDidScroll
重写 scrollViewDidScroll 方法的页面 ,要在dealloc中将scrollview.delegate = nil 。。否则 点击返回键会崩溃。 iOS 9 修复了 scrollViewDidScroll崩溃的问题。
十七、Swift文件里 打印日志 用print, 一定不能用NSLog
因为Swift 用NSLog 会记录到系统日志,可以被黑客获取。
用宏定义来屏蔽release环境下的NSLog日志输出 对 Swfit是没用的。
欢迎关注 今日头条号 名称: 云端梦想科技
欢迎关注 微信公众号:dreams2999
iOS代码规范(OC和Swift)的更多相关文章
- (转)ios 代码规范
转自http://blog.csdn.net/pjk1129/article/details/45146955 引子 在看下面之前,大家自我检测一下自己写的代码是否规范,代码风格是否过于迥异阅读困难? ...
- 【转】iOS代码规范
原文地址: http://www.cocoachina.com/ios/20150908/13335.html 简介: 本 文整理自Apple文档<Coding Guidelines for C ...
- iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包
本文章将从两个方向分别介绍 OC 与 swift 混编 1. 第一个方向从 swift工程 中引入 oc类 1. 1 如何在swift的类中使用oc类 1.2 如何在swift中实现oc的代理 ...
- iOS 代码规范
1 目的 统一规范XCode编辑环境下Objective-C.swift的编码风格和标准 2 适用范围 适用于所有用Objective-C,swift语言开发的项目. 3 编码规范 3.1 文件 项目 ...
- ios开发——实用技术OC-Swift篇&本地通知与远程通知详解
本地通知与远程通知详解 一:本地通知 Local Notification的作用 Local Notification(本地通知) :是根据本机状态做出的通知行为,因此,凡是仅需依赖本机状态即可判 ...
- iOS代码规范
一.文档结构管理 1.建立Libraries文件夹,所有第三方库放入其中. 2.建立Utilities文件夹,自已封装的类放入其中. 3.建立Constants.h头文件,所有的常量定义于其中.Con ...
- ios开发——实用技术OC-Swift篇&触摸与手势识别
iOS开发学习之触摸事件和手势识别 iOS的输入事件 触摸事件 手势识别 手机摇晃 一.iOS的输入事件 触摸事件(滑动.点击) 运动事件(摇一摇.手机倾斜.行走),不需要人为参与的 远程控制 ...
- iOS代码规范之命名规范
技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong 命名规范类命名 首字母大写,之 ...
- iOS开发之-- oc 和 swift混编之自建桥接文件
进行swift开发的时候,oc 的项目已经进行了很长一段时间,所以默认使用Xcode自建的桥接文件的时候,这个桥接文件名称是固定的,放置的目录也是无法更改的,所以我就想自己创建一个桥接文件,然后在ta ...
随机推荐
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- 干货来袭-整套完整安全的API接口解决方案
在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...
- SQLServer执行命令出现“目录无效的提示”
异常处理汇总-数据库系列 http://www.cnblogs.com/dunitian/p/4522990.html 一般都是清理垃圾清理过头了,把不该删的目录删了 网上说法: 问题描述: 1.s ...
- Cocos2d Android 环境搭建
1.在开始之前,需要先准备好资源如下,如果安卓开发环境有了直接装第3.4. 1.JDK 点击下载 (1.6) 2.ADT(已经自带Android SDK)点击下载 3.NDK 点击下载 4. ...
- Linux 常用命令(持续补充)
常用命令: command &:将进程放在后台执行 ctrl + z:暂停当前进程 并放入后台 jobs:查看当前后台任务 bg( %id):将任务转为后台执行 fg( %id):将任务调回前 ...
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- cesium核心类Viewer简介
1.简单描述Viewer Viewer类是cesium的核心类,是地图可视化展示的主窗口,cesium程序应用的切入口,扮演必不可少的核心角色. 官网的英文解析如下: A base widget fo ...
- [高性能MYSQL 读后随笔] 关于事务的隔离级别(一)
一.锁的种类 MySQL中锁的种类很多,有常见的表锁和行锁,也有新加入的Metadata Lock等等,表锁是对一整张表加锁,虽然可分为读锁和写锁,但毕竟是锁住整张表,会导致并发能力下降,一般是做dd ...
- <程序员从入门到精通> -- How
定位 自己才是职业生涯的管理者,想清楚自己的发展路径: 远期的理想是什么?近期的规划是什么?今日的任务和功课又是什么? 今日之任务或功课哪些有助于近期之规划的实现,而近期之规划是否有利于远期之理想? ...
- 兼容Mono的下一代云环境Web开发框架ASP.NET vNext
微软在2014年5月12日的TechEd大会上宣布将会发布下一代ASP.NET框架ASP.NET vNext的预览.此次发布的ASP.NET框架与以前相比发生了根本性的变化,凸显了微软“云优先”(cl ...