代码Crash -- 规避

一、向容器添加对象
主要指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 要调用的方法];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,393评论 30 472
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,873评论 0 9
  • My name is Lizzy from BA center Today I want to share yo...
    从心印心阅读 1,400评论 0 1
  • 谢谢老师对我的关怀与教育
    574c38c1602d阅读 4,030评论 0 0
  • 一觉醒来便是冬 早知道自己的生活习惯不好,喜欢吆五喝六的凑成堆儿喝酒,烟瘾也极大。可是,在进入医院之前,从来没有想...
    尔峰阅读 3,372评论 4 3

友情链接更多精彩内容