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