iOS编码规范(简版)
1. 总体指导原则
说明:这是软件开发的基本要点,软件的生命周期贯穿产品的开发、测试、生产、用户使用、版本升级和后期维护等长期过程,只有易读、易维护的软件代码才具有生命力,所以提倡写代码之前多思考,特别是逻辑复杂或者技术难点较高的地方,个人思考不清楚的,可以和团队成员进行沟通。
说明:简单是最美。保持代码的简单化是软件工程化的基本要求。不要过分追求技巧,否则会降低程序的可读性。
说明:编程首先考虑的是满足正确性、健壮性、可维护性、可移植性等质量因素,最后才考虑程序的效率和资源占用。
说明:不可以测试的代码是无法保障质量的,开发人员要牢记这一点来设计、编码。实现设计功能的同时,要提供可以测试、验证的方法。
说明:方法是一个处理单元,是有特定功能的,所以应该很好地规划方法,不能是所有东西都放在一个方法里实现,也不能把所有东西都放在一个类里面实现(比如说VC)。
【规则1-7】建议少用XIB,特别是XIB中的约束。
2.控制器规范
【规则2-2】头文件中对外提供的API,建议以方法参数的方式,不建议采用属性的方式。
说明:这是因为采用属性的方式,如果该控制器调用地方较多,每个地方的参数不一样,会造成调用方属性赋值的困惑。
【规则2-4】控制器一般承载较多的逻辑处理,因此对控制器的文件结构做如下规范:
- 头文件
文件头 #import (依次为标准库头文件、非标准库头文件) 宏定义 全局数据类型 类定义
- 实现文件
文件头 #import (依次为标准库头文件、非标准库头文件) 文件内部使用的宏 文件内部使用的数据类型 全局变量 本地变量(即静态全局变量) 类的实现 #pragma mark - LifeCycle #pragma mark - Private Method #pragma mark -- UI #pragma mark -- 数据加载和解析 #pragma mark - Event #pragma mark - Delegate #pragma mark -- UITableViewDataSource #pragma mark -- UITableViewDelegate #pragma mark - Getter/Setter
3.命名规范
说明:
- 小驼峰法:除第一个单词之外,其他单词首字母大写;
- 大驼峰法:把第一个单词的首字母也大写。
说明:以家庭医生服务页为例,前缀为GofFamilyDoctor,描述为Service,类型为ViewController,那么该类命名为GofFamilyDoctorServiceViewController。
关于类型,主要有如下几类:
|
描述
|
类型
|
|---|---|
| 控制器 | ViewController |
| 表格行 | Cell |
| 视图 | View |
| 模型 | Model |
| 数据请求 | DataHelper |
说明:比如定义一个姓名的标签,描述为name,类型为Label,命名为nameLabel。
关于类型缩写,主要有如下两大类:
一、Foundation类型
|
Foundation类型 |
缩写
|
|---|---|
| NSString | String |
| Integer/int | Int |
| BOOL/Boolean | Bool |
| char | Char |
| NSArray | Array |
| NSDictionary | Dic |
| NSDate | Date |
| NSObject | Obj |
二、UIKit类型
|
UIKit类型
|
简写
|
UIKit类型
|
简写
|
|---|---|---|---|
| UILabel | Label | UIButton | Btn |
| UITextView | TextView | UITextField | TextField |
| UITableView | TableView | UIImageVIew | ImageView |
| UIWebView | WebView | UIScrollView | ScrollView |
| UIViewController | VC | UITableViewCell | Cell |
- 方法的名称应全部使用有意义的单词组成,读起来像一句完整的话,能让人从名字就能知道方法的作用;
- set方法前需要添加set,get方法前不需要添加get;
- 常用的方法命名应该使用约定的动词,如initWith、insert、remove、replace等;
- init方法应该遵循Apple命名规则,返回类型使用 instancetype而不是id;
- 方法签名中,应该在方法类型(-/+ 符号)之后有一个空格。在方法各个段之间应该也有一个空格。
typedef NS_OPTIONS(NSInteger, MASAttribute) {
MASAttributeLeft = << NSLayoutAttributeLeft,
MASAttributeRight = << NSLayoutAttributeRight
};
说明:
- 模块可分为公用模块和私有模块,可自定义模块的缩写,比如说公用模块的导航栏,可以定义缩写为nav;
- 功能根据具体的用途划分,比如说返回按钮,功能可定位为back;
- 类型主要有几类:如背景(bg),按钮(btn)等。
综上所述,如果是导航栏的返回按钮,可命名为nav_back_btn@2x.png。
4.注释
【规则4-1】注释建议统一使用VVDocument插件。
【规则4-2】每个头文件必须添加注释,用于对该类的功能做说明。
【规则4-3】头文件中定义的属性和方法,必须添加注释。
说明:属性的注释建议在属性后使用“//<!”添加。
【规则4-5】实现文件中系统方法或系统代理,不强制添加注释。
【规则4-6】实现文件方法中,对功能段代码添加注释,比如说一个视图的定义和属性设置,那么可以作为一个功能段添加注释。
【规则4-7】枚举类型、宏定义、结构体等建议添加注释。
iOS编码规范(简版)的更多相关文章
- iOS编码规范参考
目录 注释 1.1 多行注释 1.2 单行注释 1.3 函数的注释 命名 2.1 常量的命名 2.2 函数的命名 2.3 变量的命名 2.3.1 成员变量 2.3.2 公 ...
- C#代码规范(简版)
C#项目代码规范 目的 1.方便代码的交流和维护. 2.不影响编码的效率,不与大众习惯冲突. 3.使代码更美观.阅读更方便. 4.使代码的逻辑更清晰.更易于理解. 在C#中通常使用的两种编码方式如下 ...
- iOS编码规范
The official raywenderlich.com Objective-C style guide. This style guide outlines the coding con ...
- iOS 编码规范
Coding Guidelines for Cocoa https://developer.apple.com/library/prerelease/content/documentation/Coc ...
- iOS 注释的5要3不要和编码规范的26个方面
注释 代码注释,可以说是比代码本身更重要.这里有一些方法可以确保你写在代码中的注释是友好的: 不要重复阅读者已经知道的内容 能明确说明代码是做什么的注释对我们是没有帮助的. // If the col ...
- Objective-C编码规范:26个方面解决iOS开发问题
介绍 我们制定Objective-C编码规范的原因是我们能够在我们的书,教程和初学者工具包的代码保持优雅和一致.即使我们有很多不同的作者来完成不同的书籍. 这里编码规范有可能与你看到的其他Object ...
- 学习笔记之Python最简编码规范
Python最简编码规范 - 机器学习算法与Python学习 https://mp.weixin.qq.com/s/i6MwvC4jYTE6D1KHFgBeoQ https://www.cnblogs ...
- 【安全开发】IOS安全编码规范
申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...
- Python最简编码规范
前言 本文是阅读<Python Coding Rule>之后总结的最为精华及简单的编码规范,根据每个人不同喜好有些地方会有不同的选择,我只是做了对自己来说最简单易行的选择,仅供大家参考. ...
随机推荐
- Android APK反编译(一)
apk是安卓工程打包的最终形式,将apk安装到手机或者模拟器上就可以使用APP.反编译apk则是将该安卓工程的源码.资源文件等内容破解出来进行分析. 一.APK反编译基本原理 1.APK分析 apk文 ...
- .NET MVC 控制器和行为
行为就是可访问方法(public) 行为返回类型必须是 ActionResult 或者其派生类,基本上返回类型为以下四种之一 View(视图路径) Json(对象或者对象集合) Content(字符串 ...
- django在centos部署
各种坑各种蛋疼,搞了两天终于能用了.整体分2步: 1. 通过uwsgi 启动django项目 在manage.py同级目录,新建uwsgi.ini文件 [uwsgi] # 配置服务器的监听ip和端口, ...
- 23.Hibernate-基础.md
目录 1. ORM和Hibernare 2. 基本开发 2.1 lib 2.2 写对象和引入对象映射 2.2.1 写对象类文件 2.3 配置文件 2.3.1 配置加载映射文件 2.3.2 配置数据库连 ...
- as3:sprite作为容器使用时,最好不要指定width,height
除 TextField 和 Video 对象以外,没有内容的显示对象(如一个空的 Sprite)的高度为 0,即使您尝试将 height 设置为其它值,也是这样. 如果您设置了 height 属性,则 ...
- 连续子数组最大和(python)
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...
- python命名规则
1 包.模块的命名规则:全部以小写字母形式来命名.比如:import random 2 类.对象的命名规则:类是每个单词的首字母要大写,其他字母小写比如:class MyFamily: ,类的私有属性 ...
- object references an unsaved transient instance save the transient instance before flushing
object references an unsaved transient instance save the transient instance before flushing 对象引用未保存的 ...
- NPOI 导入为table 处理excel 格式问题
ICell cell = row.GetCell(j); if (!cell.isDbNullOrNull()) { switch (cell.CellType) { case CellType.Bl ...
- 201621123002《JAVA程序设计》第四周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 继承 多态 覆盖 抽象 重载 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需要出现过多的字. 1.3 可选: ...