OC编码规范

本文详细介绍了Objective-C项目的编码规范,包括命名规则、空格和空行使用、布尔值处理等方面,帮助开发者提高代码质量和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、命名规范

1. 类命名

   首字母大写,之后每个单词首字母都大写

   使用能够反映类功能的名词短语

    文件和类同名

    举例:BaseClient、ImageStore

2. 特殊类命名

    如果是视图控制器的子类应添加后缀“ViewController”或者“Controller”

    如果是视图的子类应添加后缀“View”

    如果是按钮的子类应添加后缀“Button”

……

    举例:SettingsViewController、NavigationView

3. 分类(类别)命名

    与类命名相同,此外需添加要扩展的类名和“+”

    举例:NSString+URLEncoding

4. 协议(委托)命名

    与类命名相同,此外需添加“Delegate”后缀

    举例:ReplyViewDelegate

5. 方法命名

    首字母小写,之后每个单词首字母都大写

    方法名使用动词短语

    举例:- (void)setPostValue:(int)value

6. 方法参数命名

   首字母小写,之后每个单词首字母都大写

    具有足够的说明性

    不需要添加类型前缀

    举例:-(void)sendUserInfo:(NSDictionary *)userInfo

7. 变量命名

    首字母小写,之后每个单词首字母都大写

    具有足够的说明性

    成员变量不需要添加“_m”前缀

    成员变量添加“_”前缀

8. 常量

    常量(预定义,局部常量等)使用小写k开头的驼峰法

    举例:kInvalidHandle , kWritePerm

    枚举类型命名首字母大写,之后每个单词首字母都大写,最后加“s”

    枚举变量使用枚举类型去掉“s”作为前缀,每个单词首字母大写,中间不允许加下划线

    举例:

     typedef enum UIControlEvents{

           UIControlEventTouchDown,

           UIControlEventTouchUpInside

     }UIControlEvents;

9. 图片命名

    使用英文,首字母大写,之后每个单词首字母都大写

    添加模块名作为前缀,避免冲突

    图片应该与类文件一样,按模块分组放置

10. 分组命名

    使用英文,首字母大写,之后每个单词首字母都大写

    每个分组使用模块的名字

    使用的开源库统一放在“Library”分组下

    使用的公共组件统一放在“Common”分组下

    视图控制器及AppDelegate统一放在“Controllers”分组下

 

11. 其他规范

   操作符前后都要加空格

   避免相同的代码段在多个地方出现

   语句嵌套层次不得超过3层

   每个实现文件建议在500行以内,不能超过1000行,超过之后应考虑通过抽象类对代码进行重构

   及时删除或注释掉无用的代码

   UITableViewCell里面的networkclient都要委托出来

   点击按钮之后需要切换按钮图片,当这两张图片没有关联时(例如一张图片相比另一张图片有选中效果),不应该设置为UIControlSelected

   控件布局使用相对坐标

   确定不使用的代码应该删除

 

二、关于空行

A:.h中的空行

1,文件说明与头文件包涵(#import)之间空1行

2,头文件包涵(#import)之间,如果需要分类区别,各类别之间空1行

3,头文件包涵(#import)与@class之间空2行

4,@interface与@class之间空一行

5,头文件{}里面,空1行开始声明对象成员,如果需要分类区别,各类别之间空1行

6,{}外空1行,书写属性,如果需要分类区别,各类别之间空1行

7,空1行开始写方法,如果需要分类区别,各类别之间空1行

8,方法完成后,空1行@end

9,如果需要声明protocal,空2行接着写。通常protocal写在@end后面,但是声明在@interface前面,也可以另写一个文件

 

B:.m中的空行

1,文件说明与头文件包涵(#import)之间空1行

2,头文件包涵(#import)之间,如果需要分类区别,各类别之间空1行

3,@implementation和@synthesize之间空一行,@synthesize不要使用逗号(,)如果需要分类区别,各类别之间空1行

4,@synthesize与方法之间空2行

5,各方法之间空2行

 

C:方法里面的空行

1,方法名后空1行开始写

2,变量声明后需要空1行,如果需要分类区别,各类别之间空1行

3,条件,循环,选择语句,整个语句结束,需要空1行

4,各功能块之间空1行

5,最后一个反括号之前不空行

6,注释与代码之间不空行

7,#pragma mark与方法之间空1行

 

三、关于空格

1,.h中协议<>前面有1个空格

2,.h中成员声明时,类型与变量之间有至少1各空格。星号(*)靠近变量,不靠近类型。(部分习惯,所有变量可以以*对齐,中间留空)

3,@property后有1各空格,()里面,逗号后有1个空格,括号外,先留1个空格,再声明属性

4,方法+,-后,与()之间有1个空格

5,返回类型与*之间有1个空格,方法参数中返回类型与*之间有1个空格

6,多参数的方法,每一个参数后面都有1个空格

 

四、关于布尔值

1,不要用if(obj==nil){},而用if(!obj){}

2,比较时把常量放前面可以避免错误

不要用if(aIntValue==255){},而用if(255==aIntValue){},避免漏掉一个“=”,而变成赋值

3,不要用if(aBool==YES){},直接用if(aBool){}或if(!!aBool){}

 

五、变量属性名和其它

1,尽量在使用的时候才声明变量,尽量少用全局变量

2,变量名不要只使用一个字母,尽量能表示变量的意思

3,@synthesize和@dynamic,应该放在类实现的最上面,每一个声明都单独一行

4,协议protocls需要加#pragammarks-来区分

5,释放时应该[objrelease],obj = nil; delegate也应该在dealloc里面delegate= nil;

 

六、程序中变量、方法命名尽量能以字面意思表示功能,对于需要用注释来解释的部分代码,注释以如下格式表述:

/**

 *     方法或变量说明

 *     @param 参数1说明(针对方法)

 *     @param 参数2说明(针对方法)

 *     @return 若方法有返回值则对返回值作说明

 */


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值