一,关于空行
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需要加#pragam marks-来区分
5,释放时应该[obj release],obj = nil; delegate也应该在dealloc里面delegate = nil;
- (void)writeFisrtNumber:(NSString *)firstStr
{
}
2、如果方法名比参数名短,每个参数占用一行,至少缩进4个字符,且为垂直对齐(而非使用冒号
- (void)writeA:(NSString *)firstStr
{
}
3、
@interface RootViewController : UITableViewController<</p>
UITableViewDelegate,
UITableViewDataSource,
UITextFieldDelegate,
UITextViewDelegate
>{
……
}
4、注释:
5、方法前面的注释遵循以下格式:如果某项没有,则以N/A表示(此处为copy内容,说句实话,自己也没这么仔细的写过,但感觉部分关键方法这样写,很有必要,让看你代码的人不用太费力)
例如:
6、关于空行(安排好了,确实很美观,还有一点就是这样能区分项目组不同成员写的代码,密疏安排也是一种美)
a)
头文件包含(#import)之间,如果需要分类区别,各类别之间空1行。
头文件包含(#import)与@class之间空2行。
@interface与@class之间空1行。
头文件{}里面,空1行开始声明对象成员,如果需要分类区别,各类别之间空1行。
头文件{}外,空1行书写属性,如果需要分类区别,各类别之间空1行。
属性下面空1行开始写方法,如果需要分类区别,各类别之间空1行。
方法完成后,空1行@end。
如果需要声明protocol,空2行接着写。通常protocol写在@end后面,但是声明在@interface之前。
b).m中的空行
文件说明与头文件包含(#import)之间空1行
头文件包含(#import)之间,如果需要分类区别,各类别之间空1行。
@implementation和@synthesize之间空1行,如果需要分类区别,各类别之间空1行。
@synthesize与方法之间空1行。
方法与方法之间空1行。
C) 方法里面的空行
变量声明后需要空1行,如果需要分类区别,各类别之间空1行。
条件、循环,选择语句,整个语句结束,需要空1行。
各功能快之间空1行。
最后一个括弧之前不空行。
注释与代码之间不空行。
#pragmamark
d) 每行代码最多不得操作100个字。设置如下:Xcode=> Preferences => TextEditing
=> Page Guide at column /输入100即可。
7、对于一些特殊类型的变量,命名时要带上类型,如NSArray的变量命名为xxxArray,其他的如xxxDictionary,xxxSize等。这样就可以从名称上知道是什么类型的变量。千万不能将NSArray的变量命名为xxxDictionary。
8、常量
1)
2)
3)
例如:
#definePI 3.1415926
总结,规范其实就是让你养成一种良好习惯的标杆,在此面前我们应该顺从。
我们写出来的代码会给很多人看,为了使代码清晰简洁,方便阅读理解,都会统一遵从一定的代码规范,Objective-C同样如此。
主要参考规范:
1.Google Objective-C Style Guide
简单总结一下目前接触到的:
1.代码行度最大为100列(C++的是80)
2.声明类或方法时,注意空格的使用,参数过多时可换行保持对齐,
调用方法时也是如此,参数都写在一行或换行冒号对齐,
3.命名规则
类名首字母大写,方法首字母小写,方法中的参数首字母小写,同时尽量让方法的命名读起来像一句话,能够传达出方法的意思,同时取值方法前不要加前缀“get”
变量名小写字母开头
常量以小写字母k开头,后续首字母大写
4.关于注释
注释很重要,但除了开头的版权声明,尽可能把代码写的如同文档一样,让别人直接看代码就知道意思,写代码时别担心名字太长,相信Xcode的提示功能。
5.实例变量应该在实现文件.m中声明或以@property形式在.h文件中声明,一定要直接在.h文件声明,加上@priavte,另外,使用@private、@public,前面需要一个缩进空格。
6.尽可能保证 .h文件的简洁性,可以不公开的API就不要公开了,写在实现文件中即可。
7.Xcode支持Objective-C/C/C++混编,所以引用头文件时:#import Ojbective-C/Objective-C++头文件(Objective-C++是Objective-C与C++混编的文件),#include C/C++头文件。
8.写delegate的时候类型应该为weak弱引用,以避免循环引用,当delegate对象不存在后,我们写的delegate也就没有存在意义了自然是需要销毁的,weak与strong可以参考上一篇文章介绍。
9.实例变量声明时变量名前面加下划线“_”,局部变量不用加。
10.使用Block时,内容四个空格缩进,“^”后带有参数时,参数与“{”之间有一个空格缩进
11.建议使用“#pragma mark”,方便阅读代码
其他详细参考两个规范说明,Coding Guidelines for Cocoa 还列举了详细的命名要求。
联系客服