驼峰命名法规则
骆驼式 | 当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时 |
小驼峰法命名规则 | 除第一个的单词之外的单词之外,其他首字母大写 |
大驼峰法命名规则 | 相比小驼峰法,第一个单词的首字母也变成大写 |
类名、变量名
类名:遵循大驼峰法
成员变量名:采用下划线打头并遵循小驼峰法
如:
@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编码规范