1. 总体指导原则

【规则1-1】首先是为人编写程序,其次才是计算机。

说明:这是软件开发的基本要点,软件的生命周期贯穿产品的开发、测试、生产、用户使用、版本升级和后期维护等长期过程,只有易读、易维护的软件代码才具有生命力,所以提倡写代码之前多思考,特别是逻辑复杂或者技术难点较高的地方,个人思考不清楚的,可以和团队成员进行沟通。

【规则1-2】保持代码的简明清晰,避免过分的编程技巧。

说明:简单是最美。保持代码的简单化是软件工程化的基本要求。不要过分追求技巧,否则会降低程序的可读性。

【规则1-3】编程时首先达到正确性,其次考虑效率。

说明:编程首先考虑的是满足正确性、健壮性、可维护性、可移植性等质量因素,最后才考虑程序的效率和资源占用。

【规则1-4】编写代码时要考虑到代码的可测试性。

说明:不可以测试的代码是无法保障质量的,开发人员要牢记这一点来设计、编码。实现设计功能的同时,要提供可以测试、验证的方法。

【规则1-5】函数(方法)是为一特定功能而编写,不是万能工具箱。

说明:方法是一个处理单元,是有特定功能的,所以应该很好地规划方法,不能是所有东西都放在一个方法里实现,也不能把所有东西都放在一个类里面实现(比如说VC)。

【规则1-6】鼓励多加注释

【规则1-7】建议少用XIB,特别是XIB中的约束

2.控制器规范

【规则2-1】不需要对外提供的方法和属性,不得在头文件(.h)中进行定义。

【规则2-2】头文件中对外提供的API,建议以方法参数的方式,不建议采用属性的方式。

说明:这是因为采用属性的方式,如果该控制器调用地方较多,每个地方的参数不一样,会造成调用方属性赋值的困惑。

【规则2-3】不建议在控制器中直接调用网络请求(GofNet)和进行数据处理。

【规则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
【规则2-5】空行。【规则2-4】中的每一项内容之间空一行,方法之间空一行,重要的代码段之间空一行。

3.命名规范

【规则3-1】所有文件命名需要添加前缀。
【规则3-2】业务模块建议自定义一个前缀,比如家庭医生,可以加前缀GofFamilyDoctor。
【规则3-3】命名遵循驼峰法命名规则。

说明:

  1. 小驼峰法:除第一个单词之外,其他单词首字母大写;
  2. 大驼峰法:把第一个单词的首字母也大写。
【规则3-4】类命名遵循大驼峰法规则:前缀+描述+类型

说明:以家庭医生服务页为例,前缀为GofFamilyDoctor,描述为Service,类型为ViewController,那么该类命名为GofFamilyDoctorServiceViewController。

关于类型,主要有如下几类:

描述
类型
控制器 ViewController
表格行 Cell
视图 View
模型 Model
数据请求 DataHelper
【规则3-5】属性命名遵循小驼峰法规则:描述+类型简写

说明:比如定义一个姓名的标签,描述为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
【规则3-6】方法命名遵循小驼峰法规则,建议遵守如下相关细则:
  1. 方法的名称应全部使用有意义的单词组成,读起来像一句完整的话,能让人从名字就能知道方法的作用;
  2. set方法前需要添加set,get方法前不需要添加get;
  3. 常用的方法命名应该使用约定的动词,如initWith、insert、remove、replace等;
  4. init方法应该遵循Apple命名规则,返回类型使用 instancetype而不是id;
  5. 方法签名中,应该在方法类型(-/+ 符号)之后有一个空格。在方法各个段之间应该也有一个空格。
【规则3-7】枚举类型的类型和枚举值命名推荐使用如下格式:
typedef NS_OPTIONS(NSInteger, MASAttribute) {

    MASAttributeLeft =  << NSLayoutAttributeLeft,

    MASAttributeRight =  << NSLayoutAttributeRight

};
【规则3-8】图片命名采用规则:模块+功能+类型

说明:

  1. 模块可分为公用模块和私有模块,可自定义模块的缩写,比如说公用模块的导航栏,可以定义缩写为nav;
  2. 功能根据具体的用途划分,比如说返回按钮,功能可定位为back;
  3. 类型主要有几类:如背景(bg),按钮(btn)等。

综上所述,如果是导航栏的返回按钮,可命名为nav_back_btn@2x.png。

4.注释

【规则4-1】注释建议统一使用VVDocument插件。

【规则4-2】每个头文件必须添加注释,用于对该类的功能做说明。

【规则4-3】头文件中定义的属性和方法,必须添加注释

说明:属性的注释建议在属性后使用“//<!”添加。

【规则4-4】实现文件中定义的变量、属性和自定义方法,必须添加注释

【规则4-5】实现文件中系统方法或系统代理,不强制添加注释。

【规则4-6】实现文件方法中,对功能段代码添加注释,比如说一个视图的定义和属性设置,那么可以作为一个功能段添加注释。

【规则4-7】枚举类型、宏定义、结构体等建议添加注释。

iOS编码规范(简版)的更多相关文章

  1. iOS编码规范参考

    目录      注释 1.1  多行注释 1.2  单行注释 1.3  函数的注释   命名 2.1  常量的命名 2.2  函数的命名 2.3  变量的命名 2.3.1  成员变量 2.3.2  公 ...

  2. C#代码规范(简版)

    C#项目代码规范 目的 1.方便代码的交流和维护. 2.不影响编码的效率,不与大众习惯冲突. 3.使代码更美观.阅读更方便. 4.使代码的逻辑更清晰.更易于理解. 在C#中通常使用的两种编码方式如下 ...

  3. iOS编码规范

      The official raywenderlich.com Objective-C style guide.   This style guide outlines the coding con ...

  4. iOS 编码规范

    Coding Guidelines for Cocoa https://developer.apple.com/library/prerelease/content/documentation/Coc ...

  5. iOS 注释的5要3不要和编码规范的26个方面

    注释 代码注释,可以说是比代码本身更重要.这里有一些方法可以确保你写在代码中的注释是友好的: 不要重复阅读者已经知道的内容 能明确说明代码是做什么的注释对我们是没有帮助的. // If the col ...

  6. Objective-C编码规范:26个方面解决iOS开发问题

    介绍 我们制定Objective-C编码规范的原因是我们能够在我们的书,教程和初学者工具包的代码保持优雅和一致.即使我们有很多不同的作者来完成不同的书籍. 这里编码规范有可能与你看到的其他Object ...

  7. 学习笔记之Python最简编码规范

    Python最简编码规范 - 机器学习算法与Python学习 https://mp.weixin.qq.com/s/i6MwvC4jYTE6D1KHFgBeoQ https://www.cnblogs ...

  8. 【安全开发】IOS安全编码规范

    申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...

  9. Python最简编码规范

    前言 本文是阅读<Python Coding Rule>之后总结的最为精华及简单的编码规范,根据每个人不同喜好有些地方会有不同的选择,我只是做了对自己来说最简单易行的选择,仅供大家参考. ...

随机推荐

  1. 63.1拓展之纯 CSS 创作一个摇摇晃晃的 loader

    效果地址:https://scrimba.com/c/cqKv4VCR HTML code: <div class="loader"> <span>Load ...

  2. WinForm c#操作Excel

    1)Excel 的 Range 对象 在可以对 Microsoft Office Excel 2003 中的任何范围执行操作前,必须将其表示为 Range 对象并使用此 Range 的方法和属性.Ra ...

  3. ES6原生Class

    es5 之前定义构造函数的方法 // 先定义一个函数,强行叫它构造函数,大写的P也不是必须的,只是约定俗成 function Point(x, y) { this.x = x; // 构造函数的属性都 ...

  4. SpringMVC Get请求传集合,前端"异步"下载excel 附SpringMVC 后台接受集合

    最近项目上管理后台需要自己做一部分js部分,之前都是前端来弄...碰到了下载excel,刚开始使用ajax,搞了好久发现不合适..下载不了,网上说ajax返回类型不支持二进制流.. 因此采用 wind ...

  5. javascript:控制台详解

    javascript工具——浏览器控制台详解  大神这篇博客是写在2011年,主要介绍 “Firefox” 浏览器插件 “Firebug” 的操作,如今主流浏览器对控制台都已经提供了很好的支持.我自己 ...

  6. Django 重写用户模型

    AUTH_USER_MODEL = 'myapp.MyUser' django——重写用户模型 Django内建的User模型可能不适合某些类型的项目.例如,在某些网站上使用邮件地址而不是用户名作为身 ...

  7. CentOS6.8 使man支持显示中文

    1.安装显示中文的man命令 wget https://src.fedoraproject.org/repo/pkgs/man-pages-zh-CN/manpages-zh-1.5.1.tar.gz ...

  8. 298. Binary Tree Longest Consecutive Sequence最长连续序列

    [抄题]: Given a binary tree, find the length of the longest consecutive sequence path. The path refers ...

  9. [leetcode]78. Subsets数组子集

    Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solut ...

  10. 阮一峰大神的快排?刚才还在纠结sort()的我!真是个小傻瓜

    看到这个标题之后 我毫不犹豫的点进去了 趁现在不忙我赶紧把代码写到了我的小本本上好好研究研究 (写的就不放进来了 有点丑) 研究了下  第一反应 明明能用sort()解决的 为什么非要写这么一大串 但 ...