libc++abi.dylib: terminate_handler unexpectedly threw an exception错误小结
2016-03-08 09:03
288 查看
libc++abi.dylib: terminate_handler unexpectedly threw an exception
这个库到底是做什么的?从后缀看,是一个动态库,那么会不会是因为发生了一些动态错误?而按经验来看,一般的动态错误基本是因为动态类型错误引起,在object-c语言中,会发生动态类型错误的可能基本存在于不可变类型与可变类型之间的转换,那么我们的查错范围将优先限制在不可变类型与可变类型转换上,是否我们对一个不可变类型进行了修改操作?当然,编译器没有那么傻,如果直接对一个不可变类型进行修改操作,是会直接报错的,那么就剩下另一种可能,程序将一个不可变类型赋值给可变类型,然后对可变类型进行了修改操作,这样可以通过静态检查,但是动态运行的时候,就会发生类型错误。基于以上分析,我们可以跟踪断点,会发现程序在对mutable对象进行add、set等操作时挂掉,而这个对象实际上赋值的是一个不可变对象。常见的情况是把一个NSArray对象赋值给一个NSMutableArray对象,然后进行了delete、add等修改操作,或者把一个NSDictionary对象赋值给一个NSMutableDictionary对象,然后进行了set等操作。
解决
解决办法很简单,赋值的时候进行类型转换://mutableArr:可变数组 arr:不可变数组 //mutableDic:可变字典 dic:不可变字典 //赋值时,需要进行可变类型转换 mutableArr = [NSMutableArray arrayWithArray:arr]; mutableDic = [NSMutableDictionary dictionaryWithDictionary:dic];
相关文章推荐
- VC++ 使用soapsdk和gsoap两种方法调用webservice
- C语言九阳神功
- C语言之有符号无符号整数取值范围
- 字符串的加密和解密(C语言)
- 利用ndk c/c++ 实现android短信部分功能
- 高速排序-c++(分别用数组和容器实现)
- 十进制转化为八进制
- C++计算器项目的初始部分(第三次作业)
- 【C语言】实现字符串右移位函数
- C语言动态链接库DLL的加载
- C++变量的可见性
- C++作用域
- C++(学习笔记)三、引用 和 指针
- 线性回归,最小二乘法 C语言实现
- C/C++内存泄漏及检测
- C++结构到类的演变
- C++ 运算符重载之把类对象当着函数名使用
- 【日常】漫谈bsod
- 从尾到头打印链表
- 【C语言】实现对一个8bit数据(unsigned char)类型的指定位的置0或置1操作,并保持其他位不变