0%

Objective-C 代码规范

本文记录一下自己在写 ObjC 代码时遵守的规范,只记录大概,以供查询。

书写顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
.h
版权
头文件引入(系统/第三方/项目)
NS_ASSUME_NONNULL_BEGIN
@class
宏定义
常量定义
Block 类型定义
枚举
函数声明
协议定义
类定义 @interface
NS_ASSUME_NONNULL_END
1
2
3
4
5
6
7
8
9
10
.m
版权
头文件引入(系统/第三方/项目)
宏定义
常量定义
Block 类型定义
枚举
函数
@interface
@implementation

属性关键字顺序:

1
(nullable, nonatomic, readwrite, getter=method, strong)

规范写法

常量

下面是钟颖的代码中定义的静态常量

1
2
3
static const CGFloat kTabBarHeight      = 44.0;
static const CGFloat kStatusBarHeight = 20.0;
static const CGFloat kTableContentInset = 200;
1
2
3
4
5
6
7
8
9
10
11
12
// .h
// 字符串常量声明
extern NSString * const <stringName>;

// .m
// 静态字符串常量
static NSString * const <stringName> = @"<stringName>";
// 静态常量
static const <Type> <constantName> = <value>;

// 字符串常量
NSString * const <stringName> = @"<stringName>";

通知

下面是 AFNetworking 中通知的写法。

1
2
3
4
// .h
FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteNotification;
// .m
NSString * const AFNetworkingTaskDidCompleteNotification = @"com.alamofire.networking.task.complete";

前缀

前缀需要使用三个字母,如 QWP

类名

类名需要添加类前缀。

分类方法

特别是给系统框架的类增加 Category 的时候,定义的方法需要加小写的类前缀,如 - (NSURL *)sd_currentImageURL;,原因是如果分类方法不小心和类中原有方法或者和其他分类方法同名了,有可能就会覆盖。同一个类的不同分类也可以通过前缀避免方法重名。

Protocol 的名字

制定代理协议的时候,协议名需要加上制定者的类前缀;但是协议方法是不需要加类前缀的。

References

  1. Coding Guidelines for Cocoa
  2. GitHub Objective-C Style Guide
  3. Google Objective-C Style Guide
  4. NYTimes Objective-C Style Guide
  5. The official raywenderlich.com Objective-C style guide