编写高质量Objective-C代码

点标记语法

属性和幂等方法(多次调用和一次调用返回的结果相同)使用点标记语法访问,其他的情况使用方括号标记语法。

#良好的风格
view.backgroundColor = [UIColor orangeColor]; 
[UIApplication sharedApplication].delegate; 
#不好的风格
[view setBackgroundColor:[UIColor orangeColor]]; 
UIApplication.sharedApplication.delegate; 

异常和错误处理
不要在流控制语句中使用异常(NSException)。
异常仅用于表明程序员的错误。
为了表明一个错误,使用NSError *。
当一个方法通过引用返回一个错误参数,应该检测返回值的状态,而不是错误参数的状态。

#良好的风格
NSError *error; 
if (![self trySomethingWithError:&error]) { 
    // Handle Error 
} 
#不好的风格
NSError *error; 
[self trySomethingWithError:&error]; 
if (error) { 
    // Handle Error 
} 
在方法执行成功的情况下赋值非Null值给错误参数,会使路径跳转到假条件分支(随后程序奔溃)。

字面值
对于NSString,NSDictionary,NSArray和NSNumber类,当需要创建这些类的不可变实例时,应该使用这些类的字 面值表示形式。使用字面值表示的时候nil不需要传入NSArray和NSDictionary中作为字面值。这种语法兼容老的iOS版本,因此可以在 iOS5或者更老的版本中使用它。

#良好的风格
NSArray *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"]; 
NSDictionary *productManagers = @{@"iPhone" : @"Kate", @"iPad" : @"Kamal", @"Mobile Web" : @"Bill"}; 
NSNumber *shouldUseLiterals = @YES; 
NSNumber *buildingZIPCode = @10018; 
#不好的风格
NSArray *names = [NSArray arrayWithObjects:@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul", nil]; 
NSDictionary *productManagers = [NSDictionary dictionaryWithObjectsAndKeys: @"Kate", @"iPhone", @"Kamal", @"iPad", @"Bill", @"Mobile Web", nil]; 
NSNumber *shouldUseLiterals = [NSNumber numberWithBool:YES]; 
NSNumber *buildingZIPCode = [NSNumber numberWithInteger:10018]; 


CGRect函数
相较于使用结构体辅助函数(如CGRectMake()函数),优先使用C99结构体初始化语法。

CGRect rect = {.origin.x = 3.0, .origin.y = 12.0, .size.width = 15.0, .size.height = 80.0 }; 
当访问CGRect结构体的x、y、width、height成员时,应使用CGGeometry函数,不直接访问结构体成员。

#良好的风格
CGRect frame = self.view.frame; 
CGFloat x = CGRectGetMinX(frame); 
CGFloat y = CGRectGetMinY(frame); 
CGFloat width = CGRectGetWidth(frame); 
CGFloat height = CGRectGetHeight(frame); 
#不好的风格
CGRect frame = self.view.frame; 
CGFloat x = frame.origin.x; 
CGFloat y = frame.origin.y; 
CGFloat width = frame.size.width; 
CGFloat height = frame.size.height;

单例
应该使用线程安全的模式创建共享的单例实例。

+ (instancetype)sharedInstance { 
   static id sharedInstance = nil; 
   static dispatch_once_t onceToken; 
   dispatch_once(&onceToken, ^{ 
      sharedInstance = [[self alloc] init]; 
   }); 
   return sharedInstance; 
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值