文档章节

iOS代码编码规范

石大千
 石大千
发布于 2016/04/03 15:33
字数 1802
阅读 180
收藏 8

author: @agony

date: 2016.4.3

link: 原文地址


iOS代码编码规范

注释

  • 所负责文件头最少要保证出现标识自己身份的用户名。
  • 头文件要加上描述主要完成的功能。
  • 头文件中每一个方法加上较详细的注释说明,功能,输入输出含义。
  • 每次对文件的大改最好标记一个版本号。
  • 如果希望尽量少在方法内出现注释,那么命名应该是自注释的。关于命名在命名规范中描述。
  • 注释应当保证和所注释代码相近。代码块注释放在每一个独立代码块之前,变量注释放在变量后面,宏注释放在宏的上方。
  • 另外禁止在语句中间插入注释,如:if(a > b /* + c */ + d)
  • 修改代码过程中应保证修改注释,删除代码应保证注释一并移除。对于之前项目中遗留下来模糊的注释应予以清除。
  • 对于比较模糊、复杂的思路都应当加上功能说明性文字。

风格

  • 程序块应当采用缩进风格编写,缩进为一个Tab。

    Xcode提供代码格式化功能, 选中代码块(如CMD+A全选), 使用快捷键CTRL+I。

  • 方法行数不宜超过20行,最多不能超过80行。

  • 遇到较长方法如循环分支内代码较多的,单独抽取出方法。

  • 出现两个以上常变量的操作时,操作符前后应加上空白符,如i < 2

  • 每个方法或者功能块之间为了结构清晰,应当有且只有一行空格。

  • 在viewDidload中addSubview的事情,viewWilllayoutSubview或者didLayoutSubview里面做布局,最后在viewDidAppear里面做Notification的监听,在viewWillDisappear中做清理。至于属性的初始化,则交给对应的getter。

  • 相对独立的程序块之间、变量说明之后必须加空行:

    if(foo) {
        // program code    
    }    
    bar = foo;    
    
    //应如下书写   
    if(foo) {
        // program code
    }    
    
    bar = foo;
    
  • 一行有且最多一个语句;碰到语句较长的应折行:

    如果方法参数过长的,每个参数做一行; 如果是方法表达式过长,在_低优先级_表达式处折行,表达式放在行首

  • 所有代码块类语句(if、for、switch、case等)必须用大括号包围起来,并且在大括号结束时加上响应结束注释:

    for<(int i = 0 ; i < 2; i++){
        i++;
    }    //end of for(int i = 0 ; i < 2; i++)
    

命名

  • 推荐依据SDK的习惯命名,尤其是自定义数据结构。
  • 标识符命名使用驼峰命名法。属性、方法级别使用小驼峰法,类、协议、枚举级别元素使用大驼峰法。> 驼峰法分小驼峰法和大驼峰法。小驼峰法:除第一个单词之外,其他单词首字母大写。大驼峰法相比小驼峰法,大驼峰法把第一个单词的首字母也大写了。
  • 标识符应当采取完整的英文命名,禁止采取拼音,非ASCII字符及无法揣测含义的缩写。不推荐英文缩写,但对于常见单词如to、for约定俗成可以简写为2、4。
  • 不应当在命名中加上一些无意义的数字,如FirstFstFoo2
  • 宏命名以小写k开头,其后使用驼峰命名法:kFontSize
  • 标识符命名避免包含关键字。
  • 表达式中多使用小括号分辨层级。
  • 避免局部变量与公共变量重名。
  • 工程文件命名统一使用工程缩写作为前缀。
  • 实例属性以_XXX格式命名。

编码

  • 除非修复必要的bug,不要修改第三方库内容。

  • 每一个变量或常量都应该有一个非nil/null的初始值。

  • 一个属性应当对外最多只开放一个修改接口。

  • 尽量解决警告。

  • 合理设计变量基本数据类型,编码非同类型数据强制转换。

  • 为每一个功能性的代码块抽取出一个方法是一个不错的做法,当然最好配上自注释的命名。

  • 避免使用递归,理论上所有递归都可以转换为for循环。

  • 方法功能应该单一,一个模块只做一件事情(或返回一个结果)。

  • 避免使用公共变量,尽量使用局部变量解除结构模块间的耦合性。

  • 对于使用循环能放在循环体外的语句就放在循环体外部。

  • 不要使用太多循环和if等语句嵌套。

  • 退出自己的模块时一定要做清理工作,比如通知,定时器,网络调用,数据库关闭。

  • 使用#pragma mark - Mark Name对方法进行分组。

  • 无用的注释代码在至多一次代码管理工具提交后予以删除。如果确定只是暂时注释代码依然有用请使用#if 0#endif编译器语法注释并加上注释备注。

  • 封装模块应当方便他人调用,最良好的体验是一行代码搞定调用。

  • 禁止随意更改代码接口,但不限制新增接口。对于接口确实要改变的,应当讨论确定可行后行动。

  • 对于字面量类型的常量都应当抽取出来放在配置文件内,如通知名,网络接口。

  • 配置文件统一放置在对应的目录文件内。

  • 禁止不经协商随意更改配置。

  • 复杂的宏定义一定要注意括号嵌套。

  • 不要重复定义相同语义、功能的宏。

  • 过多的使用宏会导致编译缓慢,推荐使用全局常量。

  • 禁止拷贝代码块。

  • 不要有多余大片空白行。

  • 文件按模块及功能放置。

  • 按照工程中统一的风格编写代码,不要标新立异。

  • 推荐在getter中初始化属性。

  • 根据Apple官方推荐,语句后紧随左大括号:

    while(){
        // do somenthing
    }
    

调试

  • 避免使用NSLog输出大量无意义变量值。如果只是查看某一变量某一情况下状态,请尽量使用断点或控制台调试;或者调试完毕删除NSLog。
  • 推荐编写单元测试。
  • 对于自己编写的模块方法推荐使用断言避免第三者的非法调用。(正式代码中应当去掉所有断言。)
  • 对于程序发生的异常现象要从根源解决,而不是通过某种手段掩盖。(比如一个按钮点两次会crash,那么不能让它只点击一次来掩盖)。
  • 实例属性如*usernameTextField*尽量加上@property,并且操作使用 self.XXX 操作属性。在操作过程中方便在存取器getter和setter中设置断点调试。(初始化方法中除外,使用-initXXX()调用_XXX属性)。

本文参照了华为编码规范。欲了解苹果推荐编码规范,请参考苹果官方文档

© 著作权归作者所有

石大千
粉丝 5
博文 8
码字总数 4667
作品 0
朝阳
程序员
私信 提问
iOS新特性框架、仿微信图片浏览、视频监控、爱心动画、文字适配等源码

iOS精选源码 iOS一个看电影、电视剧集合 HDCinema(http://www.code4app.com/thread-29425-1-1.html) 一个非常简易的新特性集成框架NewFeatures(http://www.code4app.com/thread-29433-1-1.ht......

sunnyaigd
2018/05/02
20
0
IOS 内置URL schemes简介

在IOS的应用中经常会看到一些应用程序通过某个点击动作而直接跳到App Store页面,开始很奇怪这种第三方应用于IOS的系统应用交互时怎么实现的。后来发现苹果的开发者文档中关于这种通信的实现...

big军
2013/03/16
8.7K
2
iOS项目开发

主要需求: 通过远程网络对汽车进行OBD(启动、熄火、门锁检测、车辆状态设置与检测、胎压等相关汽车状态的设置与获取展示) 工作内容: 1. 熟悉车载CAN、OBD相关行业知识 2.负责智能穿戴产品I...

黄淑宾
2017/02/22
39
0
iOS与JS交互之UIWebView-协议拦截

级别:★★☆☆☆ 标签:「iOS与JS交互」「UIWebView与JS交互」「UIWebView拦截协议」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
2018/08/28
0
0
CocoaUI 1.2.4 版本发布,iOS 流式布局框架

---------------------------------------------------------------- 支持XML+CSS布局的 iOS 原生 UI 框架 CocoaUI 发布了 1.2.4 版本, 这个版本的最大特点就是更加符合CSS规范, 同时支持带有...

ideawu
2015/11/16
2.5K
7

没有更多内容

加载失败,请刷新页面

加载更多

Git 分支管理规范

Git 仓库申请流程 开发主管向 Git 管理员提交 Git 仓库申请【邮件:发送给 Git 管理员,抄送给项目经理,申请表可向 Git 管理员获取】 Git 管理员审批开发主管的申请,审批以下具体信息: 审批...

物种起源-达尔文
11分钟前
3
0
浅谈iterator迭代器模式

一、前言 设计模式有很多,最典型的是GoF的23种设计模式,听起来很多,其实大部分我们都是见过的,按照常见度来分,最常用的差不多是六七个吧,因此,我们在学习的时候应该有轻重缓急之分,不...

青衣霓裳
11分钟前
3
0
Spring Boot2 系列教程(二)创建一个 Spring Boot 项目的三种方法

我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有再继续更新 Spring B...

江南一点雨
13分钟前
3
0
熟练掌握这5个Excel技巧,只加薪不加班

月初月报的整理,周一周报的整理都离不开Excel,有的同事只要10分钟搞定,也有同事花费一上午时间整理报表,这样对比起来,时间差是很大的。那怎样快速对Excel表中的数据进行整理呢? 1.快速...

干货趣分享
17分钟前
3
0
总结:SpringCloud

一、Eureka Eureka 是 Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件 它主要包括两个组件:Eureka Server 和 Eureka Client Eureka Client:一个Java客户端,用于简化与 Eure...

浮躁的码农
26分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部