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文章

iOS13的蓝牙变化

2020-2-2 4:16:18

iOS文章

iOS开发ipa包重签名(sigh)

2020-2-2 8:06:43

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索