基本规则
- 所有的花括号都放到下一行.
- 不使用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;
- [oauthTokenKey release], oauthTokenKey = nil;
- [oauthTokenSecret release], oauthTokenSecret = nil;
- [gsid release], gsid = nil;
- [super dealloc];
- }
- 在dealloc中须将变量release后设置为nil.
- release与设置成nil在同一行, 并以逗号分隔.
- 不要忘记调用[super dealloc].
注释
- 在开发过程中注释是为自己能看明白.
- 开发结束后需要将一些与外部接口的方法, 类等进行Doxygen风格注释, 以便生成文档.