代码规范很重要,一个良好的代码习惯要从一开始就养成
公共类和文件的设计
(网络请求类、数据库类、Model类、View类,Controller<根据流程图>、Handle类<数据处理>、公共头文件<宏、接口的.h{URL}、常量const{通知中心的名字、一些状态码、枚举、结构体}、全局配置(适配{屏幕适配、iOS系统适配}的宏、系统版本判断、颜色值{参考图片})>)
一、文件
1、项目文件必须使用一个有意义的名字。
例如:TestDownImages
2、任何文件的命名不要以中文命名。
3、文件的目录按以下结构
a、Document — 文档所在路径
b、Help — 帮助文件所在路径
c、图片等资源要放在单独的目录或组中 如:Images、Pic等。
d、Public文件夹,存放公共类和第三方类库,及工具类
Base文件夹,自定义的父类
Thirds文件夹,引用外部文件或某个单独的功能。例如:应用了第三方的json下载的功能,应该把所有的文件放在单独的Json组中。
Tools文件夹,自定义的工具类(网络请求、数据库类等),公共头文件(宏、接口的url、常量const{通知中心的名字、状态码、枚举、结构体等},全局配置文件(屏幕适配、系统sdk适配、颜色值、图片名字等))。
e、model、View或ViewController等文件可以按照功能或文件类型放在独立的组中。
二、注释
注释是一个程序必不可少的一部分,它起到帮助阅读的重要作用。
并且一定要写正确的注释。注释如果不正确比不写还可怕。
1、注释可以使用/*...*/和//两种注释符号,涉及多行注释时尽量使用 /*...*/。
2、对与一行代码的注释可以放在前一行或本行的结束,不允许放在下一行,更不能在一行语句的中间(虽然这不会导致程序出错)。
3、方法前面的注释应按下面的格式
/**
* @方法名称
* @方法描述
* @输入参数
* @输出参数
* @返回值
*/
4、不必每行都加注释,在段落间加注释要好于每行加。显而易见的代码加上的是无用注释,所以不要加。
三、代码的排版
程序员在代码的编排上必须规范,如果排版格式混乱,别人就很难看懂你写的是什么,这将发费很多不必要的时间。
1、代码的缩进应使用空格,且以两个字符为单位。不能使用制表符(tab)。
2、每行的长度最多不得超过100个字符
以15寸Macbook Pro的大小,每行100个字符时能最大化地同时容下编辑器和iPhone模拟器,
通过 “Xcode => Preferences => TextEditing => 勾选Show Page Guide / 输入100 => OK” 来设置提醒
3、大括号‘{}’的使用,最后一个括号在源程序中要单独占一行。
例如:
for(int i = 0; i < 10; i++) {
}
4、空格的使用
a、关键字和表达式之间要有空格
如:if(i = 0; i < 10; i++)
b、单目操作符不能与操作数分开
如:!a
c、除,外其他的双目操作符应与操作数分开
如:i = i + 1; if(a > b)
d、.h中协议<>前面要有一个空格。
e、成员声明时,类型与变量之间至少有一个空格,*号要靠近变量。
f、@proprety()里面,号紧跟前一个变量,与后一个变量之间留一个空格,()外先留一个空格再声明属性。
g、方法的+、-后面留一个空格。
h、方法的返回类型与*之间留一个空格。参数中返回类型与*之间留一个空格。
i、在多参数方法中,每个参数后面都有一个空格。
5、每行只能有一个语句
例如:NSInteger row = [indexPath row];
NSString *imgurl = [self.list objectAtIndex:row];
NSURL *url = [NSURL URLWithString:imgurl];
6、空行
a、.h中的空行
import与interface之间加空行
成员变量与属性间, 属性与方法间 加空行
不同类型成员变量间, 不同类型的属性间,不同类型的方法间 加空行
b、.m中
延展与implementation之间加空行
implementation与方法实现间加空行
方法与方法实现间加空行
方法内不同的逻辑代码块之间加空行
四、命名规范
1、保留字
o-c中保留字或关键字不能用于命名。
2、方法
a、方法的名称应全部使用有意义的单词组成,且以小写字母开头。多单词时,后面的单词首字母大写(驼峰命名)。参数有别名时,参数别名与参数名一致,
但参数名前缀以_。参数别名与前一参数保留一个空格。参数无别名时,以有意义的字母命名。
例如:-(NameValue *) initWithId:(int)theId andName:(NSString *)theName;
3、变量
a、变量的名字要有意义,其他人能很容易读懂其代表的意义。变量名可以采用同义的英文命名,可使用几个英文单词,第一个单词首字母小写,其他的单词首字母大写。
如:NSString *userName;
b、对于一些特殊类型的变量,命名时要带上类型。
如、NSArray *cityArray;
c、对于控件命名时,后缀要带上特定的控件名。
UILable *userNameLable;
d、私有的实例变量前加一个下划线
如:_myPrivateValue;
4、常量
a、避免在程序中直接出现常数,使用超过一次的应以宏定义的形式代替
b、常数的宏定义应与它实际使用时的类型一致。
c、常量的命名应该能表达出它的用途,并且用大写的字母表示。
d、一些常量前加特殊前缀,可以作为不同常量的区分。
5、类
a、所有的类名,接口名都要以大写字母开头,多单词时后面的单词的首字母都大写。类,接口名必须是有意义的。
c、继承自UIView的类以View结尾,如:imageView。继承自ViewController的类以viewController结尾 如:imageViewController
五、修改规范
1、新增行前后应有注释说明
//修改人 修改时间 修改说明
新增的代码
//修改结束
2、删除代码项的前后应有注释
//修改人 修改时间 修改说明
删除的代码(将代码注释掉 并不是去掉)
//修改结束
3、修改代码以注释旧代码新增新代码的方式进行。
六、嵌套语句的使用规则
在程序中使用嵌套语句,一定要使嵌套语句的层次结构清晰明了。不能
让人看了半天还分不清你的层次,弄清你想要表达的意思。
1、if...else..条件语句的使用
a、判断的结构要合理
例如:if(a)
{
.......(有很多行代码)
}
else
{
......(只有一行代码)
}
如上的代码就不是很合理,可以修改为如下写法
if(!a)
{
......(只有一行代码)
}
else
{
.......(有很多行代码)
}
b、嵌套的if条件不要太多
例如:if(a)
{
if(b)
{
if(c)
{
......(还有很多if条件)
}
else
{}
}
else
{}
}
else
{}
如上代码有好多层的if条件判断的嵌套,给人的感觉就是太乱,而且不
太容易分清判断的到底是什么。那么就要把减少嵌套的语句,将嵌套的
语句方法化或者做其他处理。