OC语言的代码保护

一、向容器加对象
数组

      主要指NSMutableArray、NSMutabledictionary。向这两个容器添加nil,会引发崩溃。因此在传入前,须要对传入的内容进行非错判断。atom

//错误示范
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");
  
}

二、从容器取数据spa

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

//错误示范
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 {

   //输出错误信息
}

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

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

四、定义delegate属性的时候,必定要设置为weak。
io

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

//建议写法
@property (nonatomic, weak)  id <MyDelegate> delegate;
相关文章
相关标签/搜索