您的位置:首页 > 移动开发 > Objective-C

Objective-C编码规范[不定期更新细节]

2013-11-06 10:42 369 查看


驼峰命名法规则

骆驼式当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时
小驼峰法命名规则除第一个的单词之外的单词之外,其他首字母大写
大驼峰法命名规则相比小驼峰法,第一个单词的首字母也变成大写





类名、变量名

类名:遵循大驼峰法
成员变量名:采用下划线打头并遵循小驼峰法

如:

@interface MyAirPlane : SKSpriteNode
{
int _blood;   //血量
}

@end


非成员变量名:直接采用小驼峰法

如:

SKSpriteNode * monster=[SKSpriteNode spriteNodeWithImageNamed:@"Monster"];







行宽

为了方便阅读,在此建议每行列宽不超过80列

XCODE分割线设置方法:Xcode>Preferences>Text Editing>Show page guide 勾上






方法声明与定义

为了见名知意。在此,方法名、参数名不推荐用字母缩写

-(void)projctile:(SKSpriteNode *)projcttitle  didCollideWithMonster:(SKSpriteNode*)monster







方法调用

方法名不长:建议所有参数写在同一行中

如:

[myObject doFooWith:arg1 name:arg2 error:arg3];


方法名较长:建议一行一参数,并以冒号对齐的方式

如:

[self performSelector:@selector(RemoveForSuperSKNode:)
withObject:myLabel
afterDelay:2];







类的声明与实现

Objective-C中类的声明分成两部分,声明以及实现
通常,类的声明放在.h中,实现放在.m中








(1)声明

成员变量:采用下划线打头,能避免与局部变量声明的混淆
属性声明:第一个属性声明与花括号间隔一行
方法声明:方法名上方写注释,且注释与上面的属性或花括号间隔一行,并与@end间隔一行
举例:
@interface MyAirPlane : SKSpriteNode
{
int _boold;
}

@property(assign,nonatomic)int blood;   //血量
@property(assign,nonatomic)float speed;     //速度
@property(retain,nonatomic)NSString* name;  //名

//创建一个...
+(SKSpriteNode*)create;

@end







(2)实现

一个类的实现其实也跟声明差不多,方法体与方法体之间保持至少一行间隔,且第一个方法提和最后一个方法体跟@implementation和@end保持一行间隔
举例:
@implementation MyAirPlane

+(SKSpriteNode*)create
{
SKSpriteNode* node=[SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"];
[node setXScale:0.1];
[node setYScale:0.1];

return node;
}

@end







避免使用 new创建对象

为了使内存分配的代码更好审查,不建议调用NSObject类的类方法new。也不要在子类重写。相反,你应该使用alloc和init方法来 创建并初始化一个对象。






@public与@private

@public与@private访问标识符缩进一个空格,且独立一行存在
@interface MyAirPlane : SKSpriteNode
{
@public
...
@private
...
}

@end







#import

禁止 使用以下的方式导入

#import <Foundation/NSArray.h>
#import <Foundation/NSString.h>


推荐 使用以下的方式导入

#import <Foundation/Foundation.h>







MRC中的Dealloc处理变量

对象的释放应尽量跟@interface中的变量声明顺序保持一致,这样有助于代码审查,保证每个retained对象得以释放






if else以及BOOL的使用方法






if else

建议使用:

if (contact.bodyA.categoryBitMask<contact.bodyB.categoryBitMask) {
firstBody=contact.bodyA;
secondBody=contact.bodyB;
}
else
{
firstBody=contact.bodyB;
secondBody=contact.bodyA;
}


不建议使用

if (contact.bodyA.categoryBitMask<contact.bodyB.categoryBitMask) {
firstBody=contact.bodyA;
secondBody=contact.bodyB;
}else
{
firstBody=contact.bodyB;
secondBody=contact.bodyA;
}







BOOL

建议使用

if (!someObject) {
}
if (isAwesome)
if (![someObject boolValue])


不建议使用

if (someObject == nil) {
}
if ([someObject boolValue] == NO)
if (isAwesome == YES) // 永远不要这样做。


参照
Google OC编码规范
纽约时报OC编码规范
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息