美文网首页
iOS 关于崩溃常常引起的原因

iOS 关于崩溃常常引起的原因

作者: Nulll | 来源:发表于2019-10-09 17:24 被阅读0次

在日常开发中,总是会遇到各种各样的崩溃,有的是因为一点小小的疏忽,有的则是经验积累的不够,所以写一篇文章稍微记录一下自己开发中遇到的崩溃问题。各位看官 大爷有补充的欢迎留言。。(本文目前主要说的OC的)

1、基本数据类型崩溃问题

:基本常量要注意是不是基本数据类型(nan:not a number),一般在UI布局约束的时候。不能出现nan

//一般在进行算术运算除法运算的时候。要保证分母不能为:0, 否则结果就会是nan
// CMTime  通过 CMTimeGetSeconds() 可能返回的值为 nan
// 通过下面的方法来判断是否是 nan
if (isnan(va)) {
        NSLog(@"isnan");
    }

2、字符串崩溃问题

:字符串崩溃一般体现在取子穿或者取字符的时候

//字符串崩溃一般体现在取子穿或者取字符的时候,下边这段列子就是导致崩溃的一些常见问题
    NSString *str = @"0123456789";
    
    NSString *sub1 = [str substringFromIndex:3];    //@"3456789"
    NSString *sub2 = [str substringToIndex:3];      //@"012"
    NSString *sub3 = [str substringWithRange:(NSMakeRange(3, 3))];  //@"345"
    
    NSString *sub4 = [str substringFromIndex:20];   // Index 20 out of bounds;
    NSString *sub5 = [str substringToIndex:30];     // Index 30 out of bounds;
    NSString *sub6 = [str substringWithRange:(NSMakeRange(2, 30))]; // Range {2, 30} out of bounds;

3、字典崩溃问题

:字典的崩溃无非都是由于 nil (key 或者 value)的原因导致的

//如下这段代码为日常遇到的字典导致的崩溃(通常是后台数据返回的不是理想的数据)
NSMutableDictionary *mDict = @{@"key1":@"value1", @"key2":@"value2"}.mutableCopy;
    id value1 = [mDict objectForKey:@"key1"];       // value1
    id value2 = [mDict objectForKey:@"key3"];       // nil
    
    NSString *key = @"key3";
    NSString *value = @"value3";
    [mDict setObject:value forKey:key];     // key3 = value3
    [mDict removeObjectForKey:key];         //
    
    [mDict removeObjectForKey:@"key4"];
    key = nil;
    [mDict setObject:@"hhhhh" forKey:key];      // key cannot be nil
    value = nil;
    [mDict setObject:value forKey:@"key3"];     // object cannot be nil (key: key3)'

4、数组崩溃问题

:数组的崩溃一般都是由于越界的问题和 nil 对象

// 1、数组在添加元素的时候不能为空 ; 2、数组在取值(子数组)的时候不能越界; 3、数组删除元素越界
//下面的代码演示了日常开发中的崩溃事件
    id value = @"哈哈哈";
    NSArray *arr = @[@"123", @"abc", @"大家好"];
    NSMutableArray *marr = arr.mutableCopy;
    id obj1 = [marr objectAtIndex:1];       // @"abc"
    id sub1 = [marr subarrayWithRange:(NSMakeRange(1, 1))]; // @[@"abc"]
    [marr addObject:value];
    arr = nil;
    value = nil;
    [marr addObjectsFromArray:arr];
    
    
    id obj2 = [marr objectAtIndex:10];      // index 10 beyond bounds [0 .. 3]'
    id sub2 = [marr subarrayWithRange:NSMakeRange(1, 10)]; // range {1, 10} extends beyond bounds [0 .. 3]'
    [marr addObject:value];         // object cannot be nil'
  [marr removeObjectAtIndex:10];  //range {10, 1} extends beyond bounds [0 .. 2]'

5、NSData 崩溃问题


6、NSDate 崩溃问题


7、NSURL 崩溃问题


8、内存泄漏导致的崩溃


9、iOS10以后,没有添加权限,访问相机,相册,联系人,麦克风等;


10、UITableView、UICollectionView 等调用了没有注册的cell

相关文章

网友评论

      本文标题:iOS 关于崩溃常常引起的原因

      本文链接:https://www.haomeiwen.com/subject/qukyyctx.html