设为首页 - 加入收藏 焦点技术网
热搜:java
当前位置:首页 >

iOS代码编码规范

2016-04-03 16:06:38.0 java  
导读:公司最近打算对iOS做一个代码规范,统一下编码风格,特此整理。。。。
@author 框框 @date 2016.4.3 @link [原文地址](http://my.oschina.net/agony/blog/652034) * * * # XX公司iOS编码规范 ## 注释 * 所负责文件头最少要保证出现标识自己身份的用户名。 * 头文件要加上描述主要完成的功能。 * 头文件中每一个方法加上较详细的注释说明,功能,输入输出含义。 * 每次对文件的大改最好标记一个版本号。 * 如果希望尽量少在方法内出现注释,那么命名应该是自注释的。关于命名在命名规范中描述。 * 注释应当保证和所注释代码相近。代码块注释放在每一个独立代码块之前,变量注释放在变量后面,宏注释放在宏的上方。 * 另外禁止在语句中间插入注释,如:`if(a > b /* + c */ + d)`。 * 修改代码过程中应保证修改注释,删除代码应保证注释一并移除。对于之前项目中遗留下来模糊的注释应予以清除。 * 对于比较模糊、复杂的思路都应当加上功能说明性文字。 ## 风格 * 程序块必须采用缩进风格编写,缩进为一个Tab。 > Xcode提供代码格式化功能, > 选中代码块(如CMD+A全选), > 使用快捷键CTRL+I。 * 方法行数不宜超过20行,最多不能超过80行。 * 遇到较长方法如循环分支内代码较多的,单独抽取出方法。 * 出现两个以上常变量的操作时,操作符前后应加上空白符,如`i < 2`。 * 相对独立的程序块之间、变量说明之后必须加空行: 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。 * 不应当在命名中加上一些无意义的数字,如`First`、`Fst`、`Foo2`。 * 宏命名以小写k开头,其后使用驼峰命名法:`kFontSize`。 * 标识符命名避免包含关键字。 * 表达式中多使用小括号分辨层级。 * 避免局部变量与公共变量重名。 * 工程文件命名统一使用工程缩写作为前缀。 * 实例属性以_XXX格式命名。 ## 编码 * 每一个变量或常量都应该有一个非nil/null的初始值。 * 一个属性应当对外最多只开放一个修改接口。 * 尽量解决警告。 * 合理设计变量基本数据类型,编码非同类型数据强制转换。 * 为每一个功能性的代码块抽取出一个方法是一个不错的做法,当然最好配上自注释的命名。 * 避免使用递归,理论上所有递归都可以转换为for循环。 * 方法功能应该单一,一个模块只做一件事情(或返回一个结果)。 * 避免使用公共变量,尽量使用局部变量解除结构模块间的耦合性。 * 对于使用循环能放在循环体外的语句就放在循环体外部。 * 不要使用太多循环和if等语句嵌套。 * 退出自己的模块时一定要做清理工作,比如通知,定时器,网络调用,数据库关闭。 * 使用`#pragma mark - Mark Name`对方法进行分组。 * 无用的注释代码在至多一次代码管理工具提交后予以删除。如果确定只是暂时注释代码依然有用请使用`#if 0`,`#endif`编译器语法注释并加上注释备注。 * 封装模块应当方便他人调用,最良好的体验是一行代码搞定调用。 * 禁止随意更改代码接口,但不限制新增接口。对于接口确实要改变的,应当讨论确定可行后行动。 * 对于字面量类型的常量都应当抽取出来放在配置文件内,如通知名,网络接口。 * 配置文件统一放置在对应的目录文件内。 * 禁止不经协商随意更改配置。 * 复杂的宏定义一定要注意括号嵌套。 * 不要重复定义相同语义、功能的宏。 * 禁止拷贝代码块。 * 不要有多余大片空白行。 * 文件按模块及功能放置。 * 按照工程中统一的风格编写代码,不要标新立异。 * 根据Apple官方推荐,语句后紧随左大括号: while(){ // do somenthing } ## 调试 * 避免使用NSLog输出大量无意义变量值。如果只是查看某一变量某一情况下状态,请尽量使用断点或控制台调试;或者调试完毕删除NSLog。 * 推荐编写单元测试。 * 对于自己编写的模块方法推荐使用断言避免第三者的非法调用。(正式代码中应当去掉所有断言。) * 对于程序发生的异常现象要从根源解决,而不是通过某种手段掩盖。(比如一个按钮点两次会crash,那么不能让它只点击一次来掩盖)。 * 实例属性如*_usernameTextField_*尽量加上@property,并且操作使用 *self.XXX* 操作属性。在操作过程中方便在存取器getter和setter中设置断点调试。(初始化方法中除外,使用`-initXXX()`调用_XXX属性)。 --- 本文参照了华为编码规范。欲了解苹果推荐编码规范,请参考苹果官方[文档](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282-1001865)

(编辑: 石大千)

网友评论
相关文章