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

Objective-C编码风格规范

2013-02-25 14:37 183 查看
基本规则
所有的花括号都放到下一行. 
不使用TAB, 使用空格. 
二元操作符之间需要有空格, 一元操作符之间没有空格. 
类声明
示例代码:
@interface WBUser : NSObject
{
    NSNumber *userID;                   // 用户UID.
    NSString *screenName;               // 微博昵称.
    NSString *name;                     // 友好显示名称, 如Bill Gates, 名称中间的空格正常显示(此特性暂不支持).
    NSString *desc;                     // 个人描述.
    Gender gender;                      // 性别, m--男, f--女, n--未知.
    int onlineStatus;                   // 在线状态.
    NSString *remark;                   // 备注信息, 在查询用户关系时提供此字段.
}

WBUser : NSObject之间需要有空格. 
NSNumber *userID;中NSNumber与*之间有空格,
*与userID之间没有空格, userID与;之间也没有空格. 
注释为了保持美观, 应统一缩进到一个位置上. 
属性
示例代码:
@property (nonatomic, retain) NSNumber *userID;
@property (nonatomic, retain) NSString *screenName;
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *desc;
@property (nonatomic, assign) Gender gender;
@property (nonatomic, assign) int onlineStatus;
@property (nonatomic, retain) NSString *remark;

@synthesize userID;
@synthesize screenName;
@synthesize name;
@synthesize desc;
@synthesize gender;
@synthesize onlineStatus;
@synthesize remark;

@property (nonatomic, retain) NSNumber *userID;中@property与(之间有空格,
nonatomic,与retain之间有空格, )与NSNumber之间有空格. 
@synthesize userID;中@synthesize与userID;之间有空格. 
方法声明
示例代码:
+ (NSMutableArray *)objectsWithArray:(NSArray *)array;
+ (id)objectWithDictionary:(NSDictionary *)dict;
- (id)initWithDictionary:(NSDictionary *)dict;
- (BOOL)updateWithDictionary:(NSDictionary *)dict;

+或-与返回类型之间需要加空格. 
返回类型或参数中的的类名与*之间需要加空格. 
:与参数之间不加空格. 
方法实现
示例代码:
+ (NSMutableArray *)objectsWithArray:(NSArray *)array
{

}

- (void)imagePickerController:(UIImagePickerController *)picker 
        didFinishPickingImage:(UIImage *)img 
                  editingInfo:(NSDictionary *)editInfo
{

}

写法与方法声明相同. 
括号需要在下一行. 
当方法名超过限定的80字符时, 需要将每个参数分行, 每个参数一行, 以:对齐. 
If语句
示例代码:
if ([genderString isEqualToString:@"m"])
{
    self.gender = kGenderMale;
}
else if ([genderString isEqualToString:@"f"])
{
    self.gender = kGenderFemale;
}

else if或else单独在一行. 
if和else if后面接空格, 再写小括号里的条件. 
循环语句
示例代码:
for (NSDictionary *dict in array)
{

}

for (int i = 0; i < 10; i++)
{

}

while (YES)
{

}

注意空格的位置. 
switch语句
示例代码:
switch (self.responseDataType)
{
    case kWeiboResponseDataTypeStatuses:
        return [WBDataProcessor processStatuses:decodedObject];
        break;

    case kWeiboResponseDataTypeUser:
        return [WBDataProcessor processUser:decodedObject];
        break;

    default:
        break;
}

每个case需要缩进. 
必须要写default:. 
case中是否加花括号取决于是否有必要加, 如无必要可不加, 也可以加. 
使用pragma mark分割代码
示例代码:
#pragma mark - Properties

- (BOOL)hasReplyComment
{
    if (replyComment != nil)
    {
        return YES;
    }

    return NO;
}

#pragma mark - Equality Comparison

- (id)primaryKey
{
    return commentID;
}

#pragma mark - Memory Management

- (void)dealloc
{
    [super dealloc];
}

#pragma mark中使用英文, 每个单词首字母大写. 
#pragma mark是用于分离一类方法, 如某个delegate的全部方法等. 
释放变量时需置成nil
示例代码:
- (void)dealloc
{
    [loginUsername release], loginUsername = nil;
    [loginPassword release], loginPassword = nil
4000
;
    [oauthTokenKey release], oauthTokenKey = nil;
    [oauthTokenSecret release], oauthTokenSecret = nil;
    [gsid release], gsid = nil;

    [super dealloc];
}

在dealloc中须将变量release后设置为nil. 
release与设置成nil在同一行, 并以逗号分隔. 
不要忘记调用[super dealloc]. 
注释
在开发过程中注释是为自己能看明白. 
开发结束后需要将一些与外部接口的方法, 类等进行Doxygen风格注释, 以便生成文档.  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: