在开发过程中,我们不仅要去看别人的代码,也要让别人看我们的代码。那么,有一个良好的编码习惯将会非常重要。下面就是一些较常规的代码规范。
【1】声明类或方法时,注意空格的使用,参数过多时可换行保持冒号对齐
- (id)initWithName:(NSString *)name
age:(NSInteger)age
sex:(MDPersonalSex)sex;
调用方法时也是如此,参数都写在一行或换行冒号对齐
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"title"
message:@"message"
delegate:self
cancelButtonTitle:@"取消"
otherButtonTitles:@"确定", nil];
【2】命名规则:类名首字母大写,方法首字母小写,方法中的参数首字母小写,同时尽量让方法的命名读起来像一句话,能够传达出方法的意思,同时取值方法前不要加前缀“get”
- (void)choosePhotoAtIndex:(NSUInteger)index;
变量名小写字母开头
NSString *title = [titleArray objectAtIndex:0];
常量用小写字母k开头,后续首字母大写
static const NSString *kBaseServiceUrl = @"www.baidu.com";
【3】尽可能保证 .h文件的简洁性,可以不公开的API就不要公开了,写在实现文件中即可
【4】Xcode支持Objective-C/C/C++混编,所以引用头文件时:#import Ojbective-C/Objective-C++头文件(Objective-C++是Objective-C与C++混编的文件),#include C/C++头文件。
【5】写delegate的时候类型应该为weak弱引用,以避免循环引用。
@property (nonatomic, weak) id<MDPersonalDetegate> delegate;
【6】实例变量申明的时候前面加下划线"_",局部变量不用。
@interface MDPersonal : NSObject {
@private
NSString *_name;
NSUInteger _age;
MDPersonalSex _sex;
}
【7】在每个方法的定义前留白一行,也就是在方法和方法之间留空一行。
【8】功能相近的方法要放在一起,并推荐使用#pragma mark - ***来导航代码,切分代码块。这样可以方便函数的查找。并且可以使用快捷键control+6 来快速查找方法的位置。
#pragma mark - UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataSource.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
SCTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([SCTableViewCell class]) forIndexPath:indexPath];
return cell;
}
【9】二元运算符和参数之间要有一个空格,如赋值号=左右各留一个空格。
self.myString = @"235423523452345";
【10】一元运算符和参数之间不放置空格,比如!非运算符,&,|等
BOOL isOpen = true;
BOOL isClose = !isOpen;
【11】强制类型转换和参数之间不放置空格。
NSString *str3 = (NSString*)self.myString;
【12】长的变量值应该拆分为多行。尤其体现在使用数组或者字典。以下也分别是快速声明数组@[]和字典@{}的方法。
NSArray *array = @[@"1111111",
@"2222222",
@"3333333",
@"4444444"
];
NSDictionary *dict = @{@"key1":@"11",
@"key2":@"22",
@"key3":@"33",
@"key4":@"44"
};
【13】尽量减少代码中的重复计算,比如代码中多处要使用屏幕宽度:[[UIScreenmainScreen] bounds].size.width ,然后计算很多次,闲得很繁琐,代码也冗长。不如直接宏定义:
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
【14】宏定义全部字母大写
【15】定义枚举的时候用typedef
typedef NS_ENUM(NSInteger, MDPersonalSex) {
///性别保密
MDPersonalSexDefault,
///男
MDPersonalSexMale,
///女
MDPersonalSexFemale
};
【16】第一个花括号直接跟在方法体后,而不是另起一行,这样可以减少代码行
【17】Protocol单独用一个文件来创建,尽量不要与相关类混在一个文件中。
【18】代表类方法和实例方法的"+"加号,"-"减号后需要一个空格。
【19】加载xib时名称最好用NSStringFromClass(),可以避免书写错误
[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([SCSmartApplyPhotoCell class]) bundle:nil]
forCellReuseIdentifier:NSStringFromClass([SCSmartApplyPhotoCell class])];
【20】如果使用第三方库,尽量不要修改其内部实现,而是应该再次封装,个性定制。
【21】如果属性是BOOL类型,建议在括号中重写Get方法名称,已提高代码可读性
@property (assign, nonatomic, getter=isShow) BOOL show;
待续,不断完善中。
注:上面都是我的一家之言,如果大家的开发团队或者公司有自己的编码规范,当然按照团队的来。