写代码也写了快两年了,总结下代码编写规范;
Ios项目代码编写规范
一个好的项目的代码编写主要依据四个原则:
1)、代码的可读性;保持代码的简单化是软件工程化的基本要求。不过分追求技巧,否则会降低程序的可读性。尽量多增加代码的注释;
2)、代码的可维护性、可移植性;编程首先要考虑是否满足正确性、可维护性、可移植性,然后才可以考虑代码的执行效率和资源占用率;
3)、代码的可测试性;不能测试的代码是无法保证质量的,在编写代码实现设计功能的同时,要提供测试和验证的方法;
4)、代码的执行效率;项目中同样的代码不要出现多次,内存空间的分配和释放,遵从在哪分配就在哪释放;
具体的项目代码编写规范:
1) 项目整体布局;程序布局的目的是显示出程序良好的逻辑结构,提高程序的准确性、连续性、可读性、可维护性。更重要的是,统一的程序布局和编程风 格,有助于提高整个项目的开发质量,提高开发效率,降低开发成本;同时也会增加项目代码整体美感;对引用头文件、宏定义文件、全局变量文件、各种资源 文件、类模块文件等分别进行独立封装,以文件夹的形式集中管理;
2) 代码的对齐和断行;
1)、可使用Tab键或空格键对代码行进行缩进,缩进为四个空格;
2)、程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。{ }之内的代码块使用缩进规则对齐。
3)、结构型的数组、多维的数组如果在定义时初始化,按照数组的矩阵结构分行书写。
4)、相关的赋值语句等号对齐。
5)、在switch语句中,每一个case分支和default要用{ }括起来,{ }中的内容需要缩进。
6)、函数(方法)块之间使用两个空行分隔。
7)、一元操作符如“!”、“~”、“++”、“--”、“*”、“&”(地址运算符)等前后不加空格。“[]”、“.”、“->”这类操作符前后不加空格。
8)、多元运算符和它们的操作数之间至少需要一个空格。
9)、关键字之后要留空格,函数名之后不要留空格。
10)、方法名与形参不能留空格,返回类型与方法标识符有一个空格。
11)、注释符与注释内容之间要用一个空格进行分隔。
12)、长表达式(超过80列)要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐。
3) 项目中类变量、资源文件的命名规则;
1)、标识符要采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名。
2)、严格禁止使用连续的下划线,下划线也不能出现在标识符头或结尾(预编译开关除外)。
3)、程序中不要出现仅靠大小写区分的相似的标识符。
4)、宏、常量名都要使用大写字母, 用下划线 ‘_’ 分割单词。预编译开关的定义使用下划线‘_’ 开始。
5)、程序中局部变量不要与全局变量重名。
6)、使用一致的前缀来区分变量的作用域。
7)、类中的属性以小写字母带下划线开头。(如:m_username)
8)、资源类文件可以以大写字母带下划线开头。(如图片:IDB_SOURCEIMG)
4) 方法、接口及表达式语句书写规则;
1)、一条语句只完成一个功能。
2)、在表达式中使用括号,使表达式的运算顺序更清晰。
3)、不可将布尔变量和逻辑表达式直接与YES、NO或者1、0进行比较。
4)、在条件判断语句中,当整型变量与0 比较时,不可模仿布尔变量的风格,应当将整型变量用“==”或“!=”直接与0比较。
5)、不可将浮点变量用“==”或“!=”与任何数字比较。
6)、应当将指针变量用“==”或“!=”与nil比较。
7)、在switch语句中,每一个case分支必须使用break结尾,最后一个分支必须是default分支。
8)、不可在for 循环体内修改循环变量,防止for循环失去控制。
9)、避免函数有太多的参数,参数个数尽量控制在5个以内。
10)、对于有返回值的函数(方法),每一个分支都必须有返回值。
11)、对输入参数的正确性和有效性进行检查。
12)、在组件接口中应该尽量少使用外部定义的类型(重用,减少耦合)。
13)、函数(方法)体的规模不能太大,尽量控制在200行代码。(建议)
5) 头文件的引用问题;
1)、如果不是确实需要,应该尽量避免头文件包含其它的头文件。一次头文件包含就相当于一次代码拷贝。
2)、申明成员类,应该引用该类申明,而不是包含该类的头文件。
6) 内存引用与管理;
1)、防止内存操作越界。内存操作主要是指对数组、指针、内存地址等的操作,内存操作越界是主要错误之一。
2)、必须对动态申请的内存做有效性检查,并进行初始化;动态内存的释放必须和分配成对以防止内存泄漏,释放后内存指针置为nil。
3)、变量在使用前应初始化,防止未经初始化的变量被引用。
4)、减少指针和数据类型的强制类型转化。
5)、非初始化方法中的alloc操作之前必须要nil判断。
6)、全局指针释放后置为nil值。
7)、内存的申请和分配遵从在哪申请分配就在哪释放。
7) 注释及断言错误的使用和管理;
1)、多行注释采用“/* …*/”,单行注释采用“// …”。
2)、注释使用中文,一般情况下,源程序有效注释量必须在30%以上。
3)、文件头部必须进行注释,包括:.h文件、.c文件、.m文件、.inc文件、.def文件、编译说明文件.cfg等。
4)、方法头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、访问和修改的表、修改信息等,除了函数(方法)名称和功能描述必须描述 外,其它部分建议写描述。
5)、注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行 隔开。
6)、全局变量要有详细的注释,包括对其功能、取值范围、访问信息及访问时注意事项等的说明。
7)、注释与所描述内容进行同样的缩排。
8)、使用断言检查函数输入参数的有效性、合法性。(Assert(exp))
9)、正式软件产品中应把断言及其它调测代码去掉(即把有关的调测开关关掉)。
8) 其他注意事项或建议;
1)、建议枚举第一个成员要赋初始值。
2)、addObject之前要非空判断。
3)、release版本代码去掉NSLog打印,除了保留异常分支的NSLog。