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的对象");
}

//一般要读取某个动态生成的容器里的内容,需要先对这个容器进行检查
NSArray *array = 动态生成;
if (array != nil && array.count > 0) {

   //读取里面的内容
   
}else {

   //输出错误信息
}

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

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

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

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

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






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