Objective-C编程规范
-
原则
1.1 只遵循苹果公司发布代码中的主流代码风格,不参考任何第三方代码。
1.2 融入天源石化公司内部编程规范和习惯供开发者参考。 -
命名规范
2.1 变量、类名、函数名使用波浪式命名法,即碰到一个新的单词则使用大写字母开头,尽量使用完整的单词命名,尽量不采用缩写的单词命名;
2.2 全局变量使用 g_ 作为变量名前缀,静态变量使用 s_ 作为变量名前缀,其它情况不使用C/C++语言所提倡的匈牙利命名法;
2.3 类名使用大写字母打头,最好加上项目名称缩写作为前缀,如:IMMyself,IMRootViewController;
2.4 类的成员变量,使用下划线打头,如:_age;
2.5 加方法和减方法的方法名一律以小写字母打头,如:createTableView;
2.6 临时变量和函数参数以小写字母打头;
2.7 禁止在项目中的任何地方,包括文件名、目录名、逻辑目录名、项目名,使用空格或中文字符。 -
结构管理
3.1 建立ThridParty文件夹,将第三方库文件都放在该文件夹下。
3.2 分别建立viewControllers、views、models等文件夹将开发者自己封装的类对应放入其中,便于查找和管理。
3.3 多个功能块共用的类,建立Common文件夹,放入其中。
3.4 plist,image,audio,video,buddle等相关资源,放入Support Files文件夹,最好分别建立对应的文件夹。 -
书写规范
4.1 @interface与@implementation与#import之间空一行。
4.2 属性的声明和实现,尽量避免书写@synthesize,如果用到@synthesize,要紧接着@implementation书写,不要空行;
4.3 成员变量尽量写在@implementation内部,有必要对外暴露时,才写在@interface下:
4.4 临时变量的声明,必须赋值初始化,如:NSInteger x = 0;
4.5 声明多个临时变量,必须另起一行,禁止如下写法:
NSInteger x = 0, y = 0;
4.6 临时变量的声明语句写完后,必须隔行开始书写逻辑代码,逻辑代码中可以穿插临时变量的声明语句,同样必须隔行书写,如:
NSString *midLocalURL = [[g_pLCLog docDir] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@,%d", fileID, [g_pModel midPhotoSize]]]; if ([g_pFileMgr fileExistsAtPath:midLocalURL]) { CHECKB([g_pFileMgr removeItemAtPath:midLocalURL error:nil]); } UIImage *midImage = [image resizedImage:CGSizeMake([g_pModel midPhotoSize], [g_pModel midPhotoSize]) interpolationQuality:kCGInterpolationDefault]; NSData *midData = UIImageJPEGRepresentation(midImage, kImageCompressionQuality); CHECKB([midData writeToFile:midLocalURL atomically:YES]);
4.7 遇到新的代码块,必须隔行书写,包括函数的实现、if、switch分支语句、while、do…while、for循环语句等,例如:
NSString *channelID = [g_pModel channelID]; if ([channelID length] == 0) { channelID = @"iTunes"; } [label setText:LCString(@"TEST_VERSION")];
4.8 所有的逻辑块必须使用花括号包围,即使条件体只需编写一行代码也必须使用花括号,如下:
if (!success) { return; }
4.9 所有的二元运算符,以空格隔开,如 x += 12; 不应写成 x+=12;
4.10 所有的逗号后都要追加一个空格,如:CGRectMake(1, 3, 5, 7);
4.11 指针的声明,写在变量前,类名和之间用空格隔开,禁止写成C/C++提倡的写法:NSObject* obj = nil;应写成NSObject *obj = nil;
4.12 使用@synthesize命令时,编译器会自动创建一个下划线_开头的实例变量,不需要同时声明实例变量和属性。
不良风格:@interface IMSDK:NSObject { UInt32 versionID; } @property (nonatomic, readonly) Uint32 versionID; @end
良好风格:
@interface IMSDK:NSObject @property (nonatomic, readonly) Uint32 versionID; @end
4.13 尽量使用NSInteger取代int、使用NSUInteger取代unsigned int;
4.14 代码的注释应写在对应代码的上方或右边,禁止将注释写在对应代码的下方;
4.15 类中的每个功能模块以#prama mark – 分隔,上空两行,下空一行。
4.16 release版本程序中一律不准使用NSLog代码。
4.17 程序中变量、方法命名尽量能以字面意思表示功能,对于需要用注释来解释的部分代码,注释以如下格式表述:/** 方法或变量名说明 @param 参数1说明 @param 参数2说明 … @return 若方法又返回值则对返回值作说明 */