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是没用的。

时间: 2024-08-02 06:59:31

iOS代码规范(OC和Swift)的相关文章

iOS代码规范(Swift 与 OC 混编版)

前言 按照自己的理解整理的 iOS 代码规范,部分规范参考了网上现有的一些资料,希望对大家有所帮助 编码规范 项目结构规范 项目结构图 |-业务1 | |-业务1的Storyboard | |-子业务1 | | |-controller | | |-view | | `-model | |-子业务2 | | |-controller | | |-views | | `-models |-业务2 | |-业务2的Storyboard | |-子业务1 | | |-controller | | |-

(转)ios 代码规范

转自http://blog.csdn.net/pjk1129/article/details/45146955 引子 在看下面之前,大家自我检测一下自己写的代码是否规范,代码风格是否过于迥异阅读困难?可以相互阅读同伴的代码,是否存在阅读障碍? 若存在晦涩难懂的,理解成本增大的代码,说明你的团队需要自省了. 下面总结一下OC编程中的一些代码规范(苹果官方推荐的).以OC为示例,但不局限于OC,也可以被当作别的编程语言的开发规范约定(仅需要把OC特有的东西按照你所使用的语言的惯例即可) 参考资料:苹

iOS代码规范

前言 开发iOS至今已经有一年多的时间了,一直没有对代码做一个比较好的规范,最近公司人手逐渐增多,每个人写的代码都是无花八门,看着十分不习惯.于是综合网上一些人的经验和自己的一些编程习惯,总结出了如下的iOS代码规范. 命名规范 类命名 首字母大写,之后每个单词首字母都大写 使用能够反映类功能的名词短语 文件和类同名 特殊类命名 如果是视图控制器的子类应添加后缀"ViewController"或者"Controller",BeeFramwork中加"Boa

iOS学习:iOS代码规范

作者感言 阅读前言 iOS代码规范 Import规范 Define规范 Paragma Mark 规范 Interface规范 implementation规范 实例规范 NSDictionary规范 NSArray规范 函数规范 If-Else规范 For-In For 规范 Block规范 运算符规范 命名规范 实例命名规范 Property命名规范 Interface-class命名规范 Define命名规范 Block命名规范 For-In命名规范 布局框架 文件夹层次结构 MVC架构

IOS开发从OC到swift入门与修炼

http://www.osforce.cn/course/147?mc147=1412179E99FQ 应用前景 作为一项苹果独立发布的支持型开发语言,已经有了数个应用演示及合作开发公司的测试,相信将在未来得到更广泛的应用.某种意义上Swift作为苹果的新商业战略,将吸引更多的开发者入门,从而增强App Store和Mac Store本来就已经实力雄厚的应用数量基础[4] . 应用范围 Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用.Swift 结合了 C 和 Object

ios开发——实用技术OC-Swift篇&amp;本地通知与远程通知详解

本地通知与远程通知详解 一:本地通知 Local Notification的作用 Local Notification(本地通知) :是根据本机状态做出的通知行为,因此,凡是仅需依赖本机状态即可判断需要发出通知的行为都可以或者说应该使用Local Notification来处理.比方说:iBeacon中进入了某个Beacon region,或者说自定义的一些定时提醒等. 构建Local Notification 在iOS中,构建LocalNotification非常简单,只需要掌握好NSLoca

iOS开发之-- oc 和 swift混编之自建桥接文件

进行swift开发的时候,oc 的项目已经进行了很长一段时间,所以默认使用Xcode自建的桥接文件的时候,这个桥接文件名称是固定的,放置的目录也是无法更改的,所以我就想自己创建一个桥接文件,然后在target里配置一下,但是编译后发现系统一直提示,桥接文件找不到,所以我又找了找方法,研究了一下如何自己建立桥接文件. 1.建立一个 Header 头文件,将它放置在自己想要放置的文件下: 这里我还是取名叫做 "iHome-Bridging-Header",放在了根目录下的 SupportF

iOS开发之 -- oc和swift下输出乘法口诀表

闲来无事,写着玩: oc: //乘法口诀表输出 for (int i = 1; i<=9; i++) { for (int j = 1; j<=i; j++) { NSLog(@"%dx%d=%d\n",i,j,i*j); } } swift: //乘法口诀输入 for i in 1...9 { for j in 1...i { print("\(i)x\(j)=\(i*j)\n") } }

ios开发——实用技术OC-Swift篇&amp;触摸与手势识别

iOS开发学习之触摸事件和手势识别 iOS的输入事件 触摸事件 手势识别 手机摇晃 一.iOS的输入事件 触摸事件(滑动.点击) 运动事件(摇一摇.手机倾斜.行走),不需要人为参与的 远程控制事件(耳机控制手机声音) 1??iOS事件对象都是UIEvent类的实例 UIEvent类对事件类型定义了enum常量: typedef NS_ENUM(NSInteger, UIEventType){ UIEventTypeTouches, UIEventTypeMotion, UIEventRemote