iOS最容易违反的代码规范

命名

常量和枚举添加3个(2个是预留给Apple的)大写字符做为前缀

如果方法返回接收者的某个属性,则以属性名称作为方法名。如果方法没有间接地返回 一个或多个值,您也无须使用”get“这样的单词。

反例:

1
- (CGFloat)itemHeight;

正例:

1
- (CGFloat)getitemHeight;

不要使用”and“来连接两个表示接受者属性的关键字。
虽然下面的例子使用”and“这个词感觉还不错,但是随着创建的方法所带有的关键字越来 越多,这种方式会引起问题

正例:

1
- (void)getColor:(UIColor *)color count:(int*)count name:(NSString *)name;

反例:

1
- (void)getColor:(UIColor *)color andCount:(int*)count andName:(NSString *)name;

只有当方法间接地返回对象或者数值,您才需要在方法名称中使用 get”。这种格式只适 用于需要返回多个数据项的方法。

1
- (void)getColor:(UIColor *)color count:(int*)count name:(NSString *)name;

方法名称的开头应标识出发送消息的对象所属的类

1
2
3
- (BOOL)tableView:(NSTableView *)tableView didSelectRow:(int)row;
- (BOOL)application:(NSApplication *)sender openUrl:(NSString
*)url;

要求委托代表其他对象执行某件事,使用“should”

1
- (BOOL)controllerShouldFetch:(id)sender;

常量

NS_ENUM枚举类型定义一群相互关联的整数值常量。枚举项以枚举类型为前缀

1
2
3
4
typedef NS_ENUM(NSInteger,BTPlay) {
BTPlayBall = 0,
BTPlayGame = 1
} ;

NS_OPTIONS定义一组相互关联的位移枚举常量。位移枚举常量是可以组合使用的。枚举项以枚举类型为前缀

1
2
3
4
typedef NS_OPTIONS(NSInteger,BTPlay) {
BTPlayEveryData = 1 << 0,
BTPlayMusic = 1 << 1
} ;

使用 const 来创建浮点值常量。如果某个整数值常量和其他的常量不相关,您也可以使用 const 来创建,否则,则应使用枚举类型。

1
const float BTLabelHeight;

大写字符表示预处理字符

1
#ifdef DEBUG

使用常量来代替字符串字面值和数字。常量应该用 static 声明为静态常量,而不要用 #define,除非它明确的作为一个宏来使用。

正例:

1
2
static NSString * const BTBarcelonaNotification = @"BTBarcelonaNotification";
static const CGFloat BTBarcelonaHeaderHeight = 20.0f;

反例:

1
2
#define BTBarcelonaNotification @"BTBarcelonaNotification"
#define BTBarcelonaHeaderHeight 50

在头文件将常量暴露,在实现文件中为它赋值

1
extern NSString *const BTBarcelonaNotification;

Notification消息使用全局的 NSString 对象进行标识

[Name of associated class] + [Did | Will] + [UniquePartOfName] + Notification

1
BTWindwowWillBecomeBlackNotification

异常使用全局的 NSString 对象来标识
[Prefix] + [UniquePartOfName] + Exception

1
BTImageCornerDrawException

+(void)initialize必须判断class类型或使用dispatch_once防止执行多次

Blacktea wechat
ex. subscribe to my blog by scanning my public wechat account
记录生活于感悟,您的支持将鼓励我继续创作!