代码使用规范实在太多,这里暂时列出部分。一些比较复杂的规范需要单独说明,列表如下。
- [Apple] :Apple 明确给出建议
- [Google] :Google 明确给出建议
- [General] :通用做法(主观)
简单使用规范 [Google]
不要在 init 方法中,将成员变量初始化为 0 或者 nil。毫无必要。
仅需要使用 [[Class alloc] init] 来生成对象时,才可以使用 new 来代替。
Google 在 MRC 下的建议是“不要使用 NSObject 类方法 new,也不要在子类中重载它”,理由是"由于类方法 new 很少使用,这使得有关内存分配的代码审查更困难"。由于在 ARC 下无需担心内存管理的问题,所以在仅需要 [[Class alloc] init] 时也可以使用 new 来代替。保持公共 API 简单。避免 “厨房水槽(kitchen-sink)” 式的 API。如果一个函数压根没必要公开,就不要这么做。用私有类别保证公共头文件整洁。
当包含一个使用 Objective-C、Objective-C++ 的头文件时,使用 #import 。当包含一个使用标准 C、C++ 头文件时,使用 #include。头文件应该使用 #define 保护。
字符串应使用 copy 属性。
接受 NSString 作为参数的 setter,应该总是 copy 传入的字符串。
使用 nil 的检查来检查应用程序的逻辑流程,而不是避免崩溃。Objective-C 运行时会处理向 nil 对象发送消息的情况。
Objective-C 的方法标识符中,只使用 BOOL。
不要直接比较 YES/NO 和 BOOL 变量。不仅仅因为影响可读性,更重要的是 BOOL 为无符号字符型,这样比较的结果可能与你预期的不同。
BOOL great = [foo isGreat];
if (great == YES) // 错误
if (great) // 正确
- 只运行在 iOS 下的代码,优先考虑使用自动 synthesize 实例变量。
博客:xuyafei.cn
简书:jianshu.com/users/2555924d8c6e
微博:weibo.com/xuyafei86