IOS开发者学习笔记程序员iOS Developer

iOS代码规范

2017-03-16  本文已影响86人  东岳哥哥

iOS代码规范

代码规范
    遵循原则:见文知意、清晰简洁、无错。
包括:
命名规范
代码规范
注释规范
项目规范

1、命名规范

类名首字母大写,方法首字母小写,方法中的参数首字母小写,同时尽量让方法的命名读起来像一句话,能够传达出方法的意。
原则:见文知意。

1)类名命名

采用大驼峰法则,即每个单词的首字母采用大写字母。
格式:前缀+名字+类型
前缀:大写,例如GG,用于修饰
类型:用于表明类的范围的,继承NSObject的类可不写

例如:
GGDemoView:前缀:GG,名字:Demo,类型:View
2)变量命名

采用小驼峰法则,第一个单词的首字母小写,后面单词的首字母全部大写。

例如:name,passWord。
3)常量命名

采用大驼峰法则,前缀加小k。

例如:NSString *kPersonName = @”abc”;
4)宏命名

采用大驼峰法则。

例如:#define AppKey  @"1235"
5)方法命名

采用小驼峰法则,第一个单词的首字母小写,后面单词的首字母全部大写。同时,尽量让方法名读起来像是一句话,能够清晰的传达方法要表达的意思。
例如:

- (instancetype)initWithFrame:(CGRect)frame;
例如:
    - (UIImage *)imageName:(NSString *)name;
例如:
    - (void)setupData;
例如:
    - (instancetype)init:(CGRect)frame; //糟糕的方法命名
    - (instancetype)initWithFrame:(CGRect)frame; //好的方法命名
例如:
    - (instancetype)initWithFrame:(CGRect)frame andTitle:(NSString *)title; //不是很好
    - (instancetype)initWithFrame:(CGRect)frame title:(NSString *)title; //好
例如:
    - (BOOL)isEqualToString:(NSString *)aString;

2、代码规范

原则:有条理,层次清晰

1)属性、变量的声明
@property(nonatomic, strong) NSString *name;

特点:类型跟星号之间有一个空格,星号紧跟变量名称,括号内的参数列表,逗号紧跟前一个参数再空格接下一个参数。
注意:此格式适用于继承自NSObject类的类型,对于基本数据类型的属性/变量只是没有“*”的区别。

    推荐使用self.的方式:
        self.tableView.delegate = self;
        self.tableView.dataSource = self;
        
    不推荐如下的方式:
        _tableView.delegate = self;
        _tableView.dataSource = self;
2)方法
例如:
  - (instancetype)initWithFrame:(CGRect)frame;
  - (instancetype)initWithFrame:(CGRect)frame type:(int)type;
例如:
  - (instancetype)initWithFrame:(CGRect)frame type:(int)type {
    
  }
  //方法与方法之间空一行
  - (void)viewDidLoad {
    [super viewDidLoad];
  }
3)变量与方法声明的位置

对于私有变量、私有方法的声明,请把它们放在.m文件中。区别是不是私有,原则就是这个变量或方法要不要在别的地方使用,若是不要,就不要在.h文件中声明了,在.h文件中声明的就是公开。

4)操作符前后用1个空格隔开。

例如:

推荐写法:
    NSString *str = @"123456";
    NSInteger num = 2;
    BOOL flage = num > 1;
    str = flage ? @"1" : @"0";
这样写程序没有对与错,只是给人感觉有点凌乱:
    NSString*str =@"123456";
    NSInteger num=2;
    BOOL flage=num>1;
    str = flage?@"1":@"0";
5)代码缩进

1)使用xcode默认缩进,即tab = 4space,快捷键:左缩进commend+[,右缩进commend+]
2)xcode也提供格式化功能,选中代码,快捷键:control+i

6)判断nilYES/NO

推荐写法:

if (someObject) { ... }
if (!someObject) { ... }

避免如下写:

if (someObject == YES) { ...}
if (someObject != nil) { ...}

理由:if (someObject == YES)容易误写成赋值语句, if (someObject)写法也很简洁。

7)可变类型的变量要初始化

对于mutale类型的成员变量,如NSMutableArrayNSMutableDicyionary,先要完成初始化,再使用,没有初始化的话这个变量是为nil的。

8)block

使用block块,要弱引用对象,避免循环引用。使用关键字__weak__block__block可以修饰对象也可修饰基础数据类型的变量,__weak只能修饰对象。
规范写法如下:

__weak typeof(self) weakSelf = self;
myObj.myBlock =  ^{
    __strong typeof(self) strongSelf = weakSelf;
    if (strongSelf) {
        [strongSelf doSomething]; // strongSelf != nil
        // preemption, strongSelf still not nil
        [strongSelf doSomethingElse]; // strongSelf != nil
    }       
    else {
        // Probably nothing...
        return;
    }
};
9)移除通知

注册了observer,记得移除它,不限移除时间,但要保证在对象销毁前移除它,建议在dealloc方法中将observer移除。

10)避免硬编码

死值每次修改的时候容易被遗忘,也不方便查找、修改,另外仅仅看到一个数字,完全不知道这个数字代表的意义。可以采用动态获取,定义枚举、定义常量(知道含义)的方式。
例如:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 2; //应尽量避免使用具体的数值,除非是很明确的情况下
}   

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return self.array.count; //这种方式比写具体值方便多了。
}   
11)对象判空(nil)处理

对于外部传过的参数(特指对象)建议先进行空判断,避免不必要的错误,尤其是跟网络相关的数据(有可能json解析出来为空)。
提示:NSArray、NSDictionary类型的对象是不能添加nil数据的。

3、注释规范

注释方法有单行多行注释,按需求选择。单行注释的快捷键:commend+/。

1)变量注释
2)方法注释

方法定义必须注释清楚用途、入参出参含义、要求,建议使用VVdocumenter插件;
备注:xcode 8以后,会发现常用的注释插件VVdocumenter无法使用了。其实它是被Apple采纳了,融合到了xcode中了。快捷键:option+commend+/。(注意:光标要位于具体的方法处才有效)

3)类描述

类名最好能描述清楚自身是干什么用的,在头文件的注释中增加一行描述;

4)pragma mark

代码要按功能模块分块,用#pragma mark – name进行分组;

4、项目规范

1)项目的目录结构

一个合理的目录结构首先应该是清晰的,让人一眼看上去就能大概了解目录的职责,且容易应对新的变化。
在我们的项目中主目录按照模块分类,内目录按业务分类的方式。我们在xcode看到了目录结构,也要保证文件在磁盘中的存储结构也是如此的,方便查找、也方便管理。例如,在xcode创建了一个model目录,当向model目录中添加文件时,确保文件的存储位置是在model这个文件夹下。

2) 项目文件命名规范

采用大驼峰法则。但是不限使用中文标注,中文标注建议用小括号括起来。

例如:Tools(工具)
3)操作上的建议

1)按照目录层次来放置文件,建立子目录。

--养成一个良好的编程习惯 --

上一篇 下一篇

猜你喜欢

热点阅读