欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

代码Crash -- 规避

程序员文章站 2022-06-02 20:08:42
...

一、向容器添加对象
主要指NSMutableArray、NSMutabledictionary。向这两个容器添加nil,会引起崩溃。
分为两种模式 1.传入 2.获取
所以在传入前,需要对传入的内容进行非错判断

1.传入数据的规避措施

NSString *addString = nil;
NSMutableArray *mArray = [NSMutableArray array];
if (addString != nil)  {
    [mArray addObject:addString];
} else {
    NSLog(@"xx类xx方法试图向数组mArray传入一个nil");
}

2.从网上获取的规避措施

// 直接替换字典空值为@""
+ (NSDictionary *)deleteAllNullValueWithDictionary:(NSDictionary *)dict {
    NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];
    for (NSString *keyStr in dict.allKeys) {
          if ([[dict objectForKey:keyStr] isEqual:[NSNull null]]) {
                [mutableDic setObject:@"" forKey:keyStr];
          } else {
              [mutableDic setObject:[dict objectForKey:keyStr] forKey:keyStr];
          }
    }
  return mutableDic;
}

二、从容器取数据
主要指NSArray、NSMutableArray。从array里取数据,要注意防止下标数组越界。
一般要读取某个动态生成的容器里的内容,需要先对这个容器进行检查
NSArray *array = 动态生成;
if (array != nil && array.count > 0) { //读取里面的内容 }else { //输出错误信息}

 NSArray *array = @[@"a", @"b", @"c"];
 int index = 5;
 if (index < array.count) {
       NSString *testString = array[index];
 } else {
       NSLog(@"xx类xx方法试图从数组mArray取一个超出count的对象");
 }

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

if ([self.delegate respondsToSelector:@selector(要调用的方法)]) {
    [self.delegate 要调用的方法];
}