# 前言 #
Objective-C开发中,所有的编码规范都以苹果官方代码为标准,如果编码过程的遇到的问题在本文档中没有涉及到,请参考苹果官方代码的格式。
苹果推崇的编码规范核心思想是:可读性高。不随便使用缩写,分段式长函数名都是基于此思想。在实际编码过程中,随时以此思想为准则。
# 一:命名
## 1:清晰,无歧义
如:
```
insertObject: atIndex:(好)
insert:at:(不清晰)
```
方法名称必须明确表达出该方法的用途,驼峰名中第一段须表示出该方法的主要动作 或者宿主对象,例如可采用这种方式:btnPressed,使用第一段 btn 用于表示这是一个 按钮方法。
## 2:不要随便缩写名称,即使很长也要拼写完整。
```
setBackgroundColor: (好)
setBkgColor : (不清晰)
```
可以使用的常见缩写
```
alt Alternate.
app Application.
calc Calculate.
func Function.
horiz Horizontal.
info Information.
max Maximum.
min Minimum.
msg Message.
rect Rectangle.
temp Temporary.
vert Vertical.
btn Button
dest Destination
```
## 4:前缀
在实际编码中, 命名 class, protocol, structure,typedef等时,要使用前缀。
命名方法时,不使用前缀。因为方法处于所在类的命名空间中。
例:QTXBaseViewController, 而此类的中的方法不需要再加前缀
## 5:书写规范 使用camel命名法
正常情况下,方法名小写第一个单词的首字符,大写后续所有单词的首字符。
如: fileExistsAtPath:isDirectory:
##6:类扩展(Category):
头文件的命名形式为:原类名+“Additions”。
如:UIImageView+AFNetworking.h
##7:子类命名规范
后缀必须是父类的类型:
例如 UItableView的子类,命名为 ***TableView。 以便于识别类型。
如果 是NSObject类型的,需要指明本类的作用(如,manager,model等)
##8:代理命名
参考官方的命名方式:第一部分是类本身,第二部分表明目的或事件。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
用于通知委托对象操作即将发生或已经发生的方法名中要使用 did 或 will
- (void) browserDidScroll:(NSBrowser *)sender;
用于询问委托对象可否执行某操作的方法名中使用 should
- (BOOL) windowShouldClose:(id)sender;
# 二:格式
1. 不同的方法间要空1行。
2. 条件,循环,选择语句,整个语句结束,需要空1行。
3. 大的类别不同要空2行。
4. 星号(*)要靠近变量,不靠近类型。
如 UIColor *textColor;
5. 注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)。
# 三:其他细节
1. 对类中的不同方法进行分组,用 #pragma mark 来区分。
2. 比较时把常量放前面可以避免错误,不要用if(aIntValue==255){},而用if(255==aIntValue){},避免漏掉一个“=”,而变成赋值。
3. 所有返回BOOL类型的值必须为 YES或NO, 不能返回 1,0或其他。
4. 函数体即使只有一行代码也要加大括号。
5. 常用的宏要放到 ***-Prefix.pch 文件中。
6. 备忘、标记、TODO使用这样的格式: // TODO: 内容
# 四:代码工程结构
工程结构的规范原则是模块化,快速定位文档和资源。特制定以下规则。
第一级,分为以下两个大组
**系统文件(Applications)**
**资源文件(Resources)**
**代码文件(Classes)**
1:系统文件中 Applications
```
一些几个系统文件.如
main.m
xxx-Info.plist
xxx-Prefix.pch
xxxAppDelegate.h
xxxAppDelegate.m
```
2:资源文件中 Resources
```
—Images(Icons, Defaults, Others(此文件夹中放置所需要图片,并分组))
—Localizations(语言包)
—Databases(可选)
—Audios
```
3:代码文件中 Classes
```
—(各模块文件夹,放置某模块专属的view,model,controller等)
— ThirdParty(放置第三方库,必要时需要再进行分类放置)
— PublicUI(放置自身的公共UI库,如 QTXLoadingView)
— PublicLib(放置自身的公共功能库, 如 QTXURLManager)
```