读《objc-zen-book》
条件表达式
- 条件表达式的主体应该总是包含在大括号中:
//推荐
if (!error) {
return success;
}
//不推荐
if (!error) return success;
- 提前将列外情况排除,而不是将重要的代码置于条件表达式的主体,这样的代码更易读
//推荐
- (void)someMethod {
if (![someOther boolValue]) {
return;
}
}
//不推荐
- (void)someMethod {
if ([someOther boolValue]) {
//Do something important
}
}
- 将过于复杂的条件判断提取为变量,例如:
BOOL nameContainsSwift = [sessionName containsString:@"Swift"];
BOOL isCurrentYear = [sessionDateCompontents year] == 2014;
BOOL isSwiftSession = nameContainsSwift && isCurrentYear;
if (isSwiftSession) {
// Do something very cool
}
选择语句
- 当同一段代码可以在多个选择中执行时,可以这样写:
switch (condition) {
case 1:
case 2:
// code executed for values 1 and 2 break;
default:
// ...
break;
}
命名
-
惯例
推荐使用长且描述性的方法和变量名。 -
常量应该使用驼峰写法,单词首字母大写,并使用相关类的名称作为前缀。
//推荐
static const NSTimeInterval ZOCSignInViewControllerFadeOutAnimationDuration = 0.4;
//不推荐
static const NSTimeInterval fadeOutTime = 0.4;
供其他类使用的常量可以在头文件中定义,在.m文件中赋值。
extern NSString *const ZOCCacheControllerDidClearCacheNotification;
类
由于在Objective-C没有命名空间,你应该总是使用三个大写字母作为类名的前缀(两个大写字母是为Apple官方保留的)。
当你创建子类时,应该以类前缀开头,以父类名结尾。如ZOCNetworkClient
的子类ZOCTwitterNetworkClient
。
类别(Categories)
类别中的方法应该以小写前缀和下划线开头,如- (id)zoc_myCategoryMethod
。
类别名也最好使用前缀:
@interface NSDate (ZOCTimeExtensions)
- (NSString *)zoc_timeAgoShort;
@end
代码组织
- 使用Pragma抑制警告,更多选项参考The Clang User's Manual
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[myObj performSelector:mySelector withObject:name];
#pragma clang diagnostic pop
- 使用
#error
he#warning
添加显式的警告和错误
#error something is wrong here
#warning look here
(2014-09-06)