iOS代码规范

  1.指导原则

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

      说明:这是软件开发的基本要点,软件的生命周期贯穿产品的开发、测试、生产、用户使用、 版本升级和后期维护等长期过程,只有易读、易维护的软件代码才具有生命力。

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

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

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

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

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

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

    【原则 6】鼓励多加注释。

      类的属性和方法要添注释。统一为快捷键cmd+option+/  ;

        其他注释可使用双斜杠 // 添加。

  2.编码风格

统一的编程风格,有助于 高整个项目的开发质量。同时,对于普通程序员来说,养成良好的编程习惯有助于 高 自己的编程水平, 高编程效率。因此,统一的、良好编程风格不仅仅是个人主观美学上的或是形式上的问题,而且会涉及到产品质量,涉及到个人编程能力的 高,必 须引起大家重视。

除了这里总结的编码风格外,原则上编码风格应与苹果官方库保持一致。

2.1 基本格式

【规则 1】if、else、else if、for、while、do等语句执行语句不得紧跟其后。 不论执行语句有多少都要加 { }。

说明:这样可以防止书写失误,也易于阅读。

正例:

if (varible1 < varible2) {

    varible1 = varible2;

}

反例:下面的代码执行语句紧跟 if的条件之后,而且没有加{},违反规则。

if (varible1 < varible2) varible1 = varible2;

【规则 2】条件语句的常量需写在双等号==的前面

说明:这样写可防止双等号误写为单等号 =的情况。

正例:

if ( 3 == a) {

//执行语句

}

反例:

if ( a == 3 ) {

//执行语句

}

【规则 3】定义指针类型的变量,*应放在变量前。

正例:

float *pfBuffer;

反例:

float* pfBuffer;

【规则4】源程序中关系较为紧密的代码应尽可能相邻。

说明:这样便于程序阅读和查找。

正例:

iLength  =  10;

iWidth    =  5;//矩形的长与宽关系较密切,放在一起。

strCaption  =  “Test”;

反例:

iLength = 10;

strCaption = “Test”;

iWidth = 5;

【规则 5】相关的赋值语句等号对齐。例子如【规则4】正例。

2.2 空行空格

【规则 1】函数(方法)块之间使用两个空行分隔。

【规则 2】多元运算符和它们的操作数之间至少需要一个空格。

  正例:

iWidth = 5;

iWidth += 5;

  反例:

iWidth=5;

iWidth+=5;

【规则 3】关键字之后要留空格。

说明:if、for、while等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。

【规则 4】方法名与形参不能留空格,返回类型与方法标识符有一个空格。

  正例:

- (UIColor *)initWithWhite:(CGFloat)white alpha:(CGFloat)alpha;

  反例:

  - (UIColor *)initWithWhite : ( CGFloat ) white alpha : ( CGFloat ) alpha;

【规则 5】‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。‘,’之后要留空 格。‘;’不是行结束符号时其后要留空格。

  正例:

for (i = 0; i < MAX_BSC_NUM;  i++)

{

DoSomething(iWidth,  iHeight);

}

【规则 6】注释符与注释内容之间要用一个空格进行分隔。

正例:

/** 图片视图 */

反例:

/**图片视图*/

2.3 断行

长表达式(超过 80 列)要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐。

说明: 条件表达式的续行在第一个条件处对齐。

for循环语句的续行在初始化条件语句处对齐。

          函数调用和函数声明的续行在第一个参数处对齐。

  赋值语句的续行应在赋值号处对齐。

正例:

if ((iFormat == CH_A_Format_M)

&& (iOfficeType == CH_BSC_M)) //条件表达式的续行在第一个条件处对齐

{

doSomething();

}

for (long_initialization_statement;

      long_condiction_statement;

long_update_statement)

{

doSomething();

}

//函数声明的续行在第一个参数处对齐

BYTE ReportStatusCheckPara(HWND hWnd,

BYTE ucCallNo,

BYTE ucStatusReportNo);

//赋值语句的续行应在赋值号处对齐

fTotalBill = fTotalBill +faCustomerPurchases[iID]

    + fSalesTax(faCustomerPurchases[iID]);

2.4 命名规则

【规则 1】变量、类名、文件夹名字统一使用驼峰命名法命名,类名和文件夹名字首字母需大写。

【规则 2】宏统一大写命名,中间可以添加下划线。

正例:

#define BUTTON_WIDTH (int)320

反例:

#define kButtonWidth (int)320

2.5 其他

【规则 1】在表达式中使用括号,使表达式的运算顺序更清晰。

说明:由于将运算符的优先级与结合律熟记是比较困难的,为了防止产生歧义并 高可读性, 即使不加括号时运算顺序不会改变,也应当用括号确定表达式的操作顺序。

正例:

if (((iYear % 4 == 0) && (iYear % 100 != 0)) || (iYear % 400 == 0))

反例:

if(iYear %4==0&&iYear %100!=0||iYear %400==0)

【规则 2】避免表达式中的附加功能,不要编写太复杂的复合表达式。

说明:带附加功能的表达式难于阅读和维护,它们常常导致错误。对于一个好的编译器,下 面两种情况效果是一样的。

正例 :

aiVar[1] = aiVar[2] + aiVar[3];

aiVar[4]++;

iResult = aiVar[1] + aiVar[4];

aiVar[3]++;

反例:

iResult = (aiVar[1] = aiVar[2] + aiVar[3]++) + ++aiVar[4] ;

【规则 3】如果for循环的条件语句,变量比较的值如果需要计算应在循环之前计算好。

  正例:

  NSInteger count = Self.peopleArray.count;

  for (NSInteger i == 0; i < count; i++) {

//执行语句

  }

  反例:

  for (NSInteger i == 0; i < Self.peopleArray.count; i++) {

//执行语句

  }

【规则 4】应避免直接使用数字对业务类型进行判断,可用枚举类型替代。

正例:

if (role == Admin) {

//执行语句

}

反例:

if(role == 1) {

//执行语句

}

【规则 5】视图控制器代码的分块规范

  #program mark -- VC生命周期

  viewdidload

  viewdisappear

  #program mark -- 系统代理

  //代理方法

  #program mark -- 自定义代理

//代理方法

  #program mark -- 事件方法

//事件方法

  #pragram mark  -- 推送方法

  //推送方法

  #program mark --  自定义方法

  //自定义方法

  #program mark --  getter setter方法

  //getter setter方法

你可能感兴趣的:(iOS代码规范)