IOS编码规范

命名

Bundle id命名:

规则:采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名根据应用进行命名。

类命名:

类命采取驼峰命名规则,即首字母必须大写,如果为词组,则每个单词的首字母必须大写,类名只能使用名词或名词词组;并以项目工程开头命名,力求类名简单 。

继承自UIView的类以View结尾。

继承自ViewController的类以ViewController 结尾。

保存数据的实体以Model结尾。

方法的命名:

规则:方法名第一个单词是一个动词,其首字母小写,其后的所有单词首字母大写。

如:- (void) addNotification{}

类中常用方法命名

类的获取方法

如果返回值为单个值,一般在头部加上单词“get”。如果返回值是数组或列表,要在头部加单词“find”

如:- (NSString*)getUserName{}、- (NSArray*)findFriends{}

类的设置方法

在被访问字段名的前面加上前缀 set

如:- (void)setName:(NSString *)name{}

类的布尔型判断方法

一般要求方法名使用单词 is或has 做前缀

如:isNetWorkConnected()

构造方法应该用递增的方式写。

参数个数少的在前

变量命名

规则:第一个单词首字母必须小写,往后的单词需要符合驼峰命名规则,即第一个字母大写。变量名尽可能的使用名词或名词词组。同样要求简单易懂,不允许出现无意义的单词。

如:String *userName

其他命名规则


实例变量命名

加前缀“_”

控件变量命名

规则:一般的变量命名后加上控件名称

IBOutlet UILabel *userNameLabel;

常量命名:

规则:必须全部大写,单词间用下划线隔开。

如:MAP_KEY

异常命名:

规则:自定义异常首字母大写,以 Exception 为结尾。

如:AppException

资源命名:

项目中所使用的所有资源命名必须以全部单词小写,单词间以下划线分割,加前缀区分。

原则:

1)采用单词全拼,或者大家公认无岐义的缩写(比如:nav,bg,btn等)

2)采用“模块+功能”命名法,模块分为公共模块、私有模块。公共模块主要包括统一的背景,导航条,标签,公共的按钮背景,公共的默认图等等;私有模块主要根据app的业务

功能模块划分,比如用户中心,消息中心等

btn_xx_normal          按钮正常情况下的效果

btn_xx_press             按钮点击下的效果 

bg_head                    背景图片使用bg_功能_说明

def_search_cell          默认图片使用def_功能_说明

icon_more_help         图标图片使用icon_功能_说明

seg_list_line              具有分割特征的图片使用seg_功能_说明

sel_ok                        选择图标使用sel_功能_说明


代码风格

整体代码风格需要统一

Import

Import语句引入的次序如下:

IOS imports

第三方库

自定义.h文件

在每组内部按字母排序,大写字母排在小写字母的前面。每个大组之间应该空一行。

空格

1. 关键字与其后的表达式之间需要加空格。

2. 单目操作符不应与操作数分开。

3. 除’,’外,其它双目操作符应与它们的操作数用空格隔开。

4. 在.h中协议<>前面有一个空格。

5. 在.h中成员声明时,类型与变量之间有至少1个空格。*号靠近变量,不靠近类型。

6. @property后留1个空格,()里面,逗号紧跟前一变量,与后一变量之间留1 个空格。()外面,先留1个空格,再声明属性。

7. 方法的+,-后面与()。

8. 返回类型与*之间留1个空格,方法参数中返回类型与*之间留1个空格

9. 在多参数方法中,每个参数后面都有1个空格。

10. Switch..case 语句,代码块需要留4个空格。

11. If语句嵌套,内部if语句需要留4个空格。

.h文件空行

以下情况要空行:

1. 头文件包含(#import)与@class之间

2. @interface与@class之间

3. 头文件{}内,空1行开始写成员对象。

4. 头文件{}外,空1行开始写属性。

5. 属性与方法之间。

6. 如果需要声明protocol,空2行接着写。通常protocol写在@end后面,但是声明在@interface之前。

7. 方法与方法之间空1行。

8. 方法与@end之间。

.m文件空行

1. 文件说明与头文件包含(#import)之间。

2. 头文件包含(#import)之间。

3. @implementation和@synthesize之间。

4. @synthesize与方法之间。

5. 变量声明后需要空1行。

6. 各功能块之间。

7. #pragma mark 与方法之间。

Log

规则:统一使用自定的log服务,不直接使用系统自带。

语句

每行只能有一个语句

每行代码最多不得操作100个字符。

控制语句

If语句

判断中如果有常量,则应将常量放在判断式的右侧,如if (a > b)

如:if (index > 0) …… //单条语句,放在if同一行

if (index > 0){ //多行语句

……….

}

While语句

循环语句中不允许出现表达式。

如while(I < documents.getCount())

尽可能保证.h文件的简介性,可以不公开的API就不要公开,写在实现文件中即可

注释


头文件注释:

所有的源文件都应该在开头有一个注释,其中列出头文件的相关描述、作者、以及对应的版本信息。

/*!

@header 头文件名称

@abstract 关于这个源代码文件的一些基本描述

@author作者

@version 1.00 2012/01/20 Creation (此文档的版本信息:版本号+创建时间)

*/

类注释

每一个类都要包含如下格式的注释,以说明当前类的功能等。

/*!

@class类名

@abstract 这里可以写关于这个类的一些描述。

*/

枚举注释

每一个枚举都需要包含相对应的enum描述,以及每个枚举值对应的含义。

/*!

@enum枚举名称

@abstract 关于这个enum的一些基本信息

@constant 各个对应值得含义,如: OKButton 对应的是OK按钮的Tag

*/

typedef NS_ENUM (NSInteger,RunGoalTypeE){

kRunGoalTypeNone= 0,//无目标

kRunGoalTypeTime= 1,//以时间为目标

kRunGoalTypeDistance= 2,//以距离为目标

kRunGoalTypeCalori= 3,//以消耗卡路里为目标

};

协议注释

协议需要注明是哪个类对应的protocol,以及自身的相关描述。

/*!

@protocol 协议名称

@abstract 这是哪个类的protocol

@discussion 具体描述信息

*/

方法注释

包括当前方法的用途,当前方法参数的含义,当前方法返回值的内容和对应的错误参照。

/*!

@method 方法名

@abstract该方法的一些简要描述

@discussion该方法的具体使用方式,需要注意的地方,如果你是设计一个抽象类或者一个共通类给给其他类继承的话,在这里需要具体描述一下怎样使用这个方法。

@param text参数列表

@param error 错误参照

@result 返回结果

*/

属性注释

/*!

@property 属性名称

@abstract 该Property的一些基本描述。

*/

类别注释

/*!

@category 类别名称

@abstract 哪个类的类别

*/


文件组织结构

1. 类文件组织

建议逻辑结构和物理结构保持一致,以便有效地管理文件

基于MVC设计模式原则,至少要保证controller与数据处理,网络请求相对独立

基于功能模块原则,功能模块分包括数据/网络处理,UI前端界面两部分,数据/网络处理应该在数据/网络处理的框架下,而UI前端界面比如用户中心,消息中心,它们的专有的controller,view等应该在属于文件夹。还会遇到一些公共的view,可以开辟出公共的文件夹来管理

在实际中使用中, 可以结合项目特点灵活使用,但基本的原则一定要保持,保持良好的类文件组织结构,对团队有益无害。

2. 图片资源文件组织

图片资源文件,强烈建议采用Images.xcassets管理,尽量少用自己创建的文件夹管理。

使用Images.xcassets的优势很多,具体可以查阅读相关文献资料,这里只从工程管理上说一点,在Images.xcassets中添加图片资源,不会对project文件造成改变,而直接在文件夹里添加图片文件,每次都会对project文件造成改变,因此使用Images.xcassets管理图片资源可以减少project冲突的次数。

2. 类代码组织

一个原则:析构函数- (void)dealloc最好放到类最上面,第一眼就可以看到这个方法,可以方便看到是否remove了。一些操作,对内存的合理释放等,controller,view的生命周期函数放到最上面,自己实现的方法在下面,相同/相近功能的方法采用#pragma mark -来标记,以便查看。

修改规范

新增代码行

新增代码行的前后应有注释行说明。

//修改人,修改时间,修改说明

新增代码行

//修改结束

删除代码行

删除代码向的前后用注释行说明

//修改人,修改时间,修改说明

要删除的代码行(将要删除的语句进行注释)

//修改结束

修改代码行

修改代码行以注释旧代码行后再新增代码行的方式进行。

//修改人,修改时间,修改说明

//修改前代码行开始

//修改前代码行

//修改前代码行结束

//修改后代码行开始

修改后代码行

//修改结束

避免出现的情况

永远不要有空的catch语句。替代方案:向方法的调用者抛出异常、或者抽象级别抛出新异常。

避免在一条语句中给多个变量赋相同的值

不要将赋值运算符用在与相等运算符混淆的地方

重复代码,复制-粘贴

长方法,将所有逻辑处理放在一个方法里面,每个方法都应有其自己的意图

大类,妄想将所有模块放在一个类中实现。

小类,一个类所承担的责任太少,应该将其消除,类的维护需要额外的开销


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 注释规范 文件头注释 文件头注释采用如下格式,该注释由xcode自动生成。如果你对其他人的原始代码作出重大的修改,...
    yangzming阅读 723评论 0 1
  • 以下所有纯属个人习惯,不喜勿喷 语言:应该使用美国英语命名 如 UIColor *myColor = [UICol...
    夹娃娃达人阅读 295评论 0 0
  • Object-C 开发代码规范概要Object-C是一门面向对象的动态编程语言,主要用于编写IOS和MAC应用程序...
    克鲁德李阅读 530评论 0 1
  • 面试被问到公司编码规范问题,感觉有很多东西,但是不知道该怎么说出来,今天突然找到 李明杰 老师的一份编码规范。重新...
    Dombo_Y阅读 958评论 1 2
  • 遇见你之前,她不相信一见钟情,遇见你之后,她满心欢喜,眉梢眼角露笑意。 周莹被养父卖到沈家当丫鬟,一开始她受到沈家...
    南湘紫阅读 1,355评论 51 51