读《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 clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[myObj performSelector:mySelector withObject:name];
#pragma clang diagnostic pop
  • 使用#errorhe #warning添加显式的警告和错误
#error something is wrong here
#warning look here

(2014-09-06)