您的当前位置:首页正文

iOS开发规范

2024-11-10 来源:个人技术集锦

引子

在看下面之前,大家自我检测一下自己写的代码是否规范,代码风格是否过于迥异阅读困难?可以相互阅读同伴的代码,是否存在阅读障碍?

若存在晦涩难懂的,理解成本增大的代码,说明你的团队需要自省了。


下面总结一下OC编程中的一些代码规范(苹果官方推荐的)。以OC为示例,但不局限于OC,也可以被当作别的编程语言的开发规范约定(仅需要把OC特有的东西按照你所使用的语言的惯例即可)

 参考资料: 对建议的代码规范的说明

命名

命名规则对于维护代码来说是非常重要的,。Objective-C方法名往往很长,不过这也有好处,让很多注释变得毫无意义。

本文推荐驼峰法,也是Objective-C社区的标准。 

驼峰法分小驼峰法和大驼峰法。小驼峰法:除第一个单词之外,其他单词首字母大写。大驼峰法相比小驼峰法,大驼峰法把第一个单词的首字母也大写了。

1.基本原则

1.1 清晰

又清晰又简洁是最好的了,但简洁不如清晰重要。总的讲不要使用单词的简写,除了非常常用的简写以外,尽量使用单词全称。API的名称不要有歧义,一看你的API就知道是以什么方式做了什么事情,不要让人有疑问

1.2 一致性

做某个事情代码通常都叫这个名字,比如tag、setStringValue,那么你也这么叫。你在不确定怎么起名字的时候,可以参考一些常用的名字:

2. 类命名

类名(不包括类别和协议名)应该用大写开头的大驼峰命名法。类名中应该包含一个或多个名词来说明这个类(或者类的对象)是做什么的。

在应用级别的代码里,尽量不要使用带前缀的类名。每个类都有相同的前缀不能提高可读性。不过如果是编写多个应用间的共享代码,前缀就是可接受并推荐的做法了(型如 JKPhotoBrowser )。


示例1:

@interface ImageBrowseView :UIView

@end


示例2:(带前缀JK)

@interface JKPhotoBrowser :UIView

@end


3. 类别命名

类名+标识+扩展(UIImageView +HP+Web

例:如果我们想要创建一个基于UIImageView 的类别用于网络请求图片,我们应该把类别

放到名字是UIImageView+HPWeb.h的文件里。UIImageView为要扩展的类名,HP为专属标

识,Web为扩展的功能。

类别的方法应该都使用一个前缀(型如hp_myCategoryMethodOnAString ),以防止Objective-

space),方法命名规则就没必要恪守了。


类别HPWeb头文件,UIImageView+HPWeb.h如下:

@interface UIImageView (HPWeb)


- (void)hp_setImageWithURLString:(NSString *)urlStr;


@end

4. 方法命名 

方法使用小驼峰法命名, 一个规范的方法读起来应该像一句完整的话,读过之后便知函数

的作用。执行性的方法应该以动词开头,小写字母开头,返回性的方法应该以返回的内容

开头,但之前不要加get。

示例:

- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;

(instancetype)arrayWithArray:(NSArray *)array;


如果有参数,函数名应该作为第一个参数的提示信息,若有多个参数,在参数前也应该有

提示信息(一般不必加and)

 一些经典的操作应该使用约定的动词,如initWith,insert,remove,replace,add等等。

5. 变量命名 

变量名使用小驼峰法, 使变量名尽量可以推测其用途属性具有描述性。别一心想着少打几

个字母,让你的代码可以迅速被理解更加重要。

5.1 类成员变量:

成员变量用小驼峰法命名并前缀下划线,Objective-C 2.0,@property 和 @synthesize 提供

了遵守命名规范的解决方法


示例:

@interface ViewController ()

@property (nonatomic,strong)NSMutableArray    *dataArray;

@property (nonatomic,strong)UITableView       *tableView;

@end


@implementation ViewController


@end


5.2 一般变量命名 

        

示例:


NSMutableArray  *ticketsArray = [NSMutableArrayarrayWithCapacity:0];    

NSInteger numCompletedConnections =3;



5.3 常量命名 


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

kWritePerm 


示例:

#define kRunAnnotationStartPointTitle     @起点"


typedef NS_ENUM (NSInteger,RunGoalTypeE){

    kRunGoalTypeNone       = 0,    //无目标

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

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

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

};


NSString *const kGroupInfoName =@"name";


6. 图片资源文件命名 

先看下新浪微博app图片资源命名方式,下面是部分截图:

显示全文