OC语言的代码保护

1、向容器加对象

      主要指NSMutableArray、NSMutabledictionary。向这两个容器添加nil,会引起崩溃。所以在传入前,需要对传入的内容进行非错判断。

//错误示范
NSString *addString = nil;
NSMutableArray *mArray = [NSMutableArray array];
[mArray addObject:addString];

//建议写法
NSString *addString = nil;
NSMutableArray *mArray = [NSMutableArray array];
if (addString != nil) {

  [mArray addObject:addString];
  
}else {

  NSLog(@"xx类xx方法试图向数组mArray传入一个nil");
  
}

2、从容器取数据

     主要指NSArray、NSMutableArray。从array里取数据,要注意防止下标数组越界。

//错误示范
NSArray *array = @[@"a", @"b", @"c"];
int index = 5
NSString *testString = array[index];

//建议写法
NSArray *array = @[@"a", @"b", @"c"];
int index = 5

if (index < array.count) {

   NSString *testString = array[index];

}else {

   NSLog(@"xx类xx方法试图从数组mArray取一个超出count的对象");
}

3、调用其他类的方法或不知道要调用的方法当前SDK版本是否支持。需要先判断一下这个方法是否存在。

//错误示范
[self.delegate 要调用的方法];
    
//建议写法
if ([self.delegate respondsToSelector:@selector(要调用的方法)]) {
        
        [self.delegate 要调用的方法];
}

4、定义delegate属性的时候,一定要设置为weak。

//错误示范
@property (nonatomic, assign)  id <DetailViewDelegate> delegate;

//建议写法
@property (nonatomic, weak)  id <DetailViewDelegate> delegate;






你可能感兴趣的:(ios,开发经验,oc)