第一、iOS常见crash问题
1、插入空元素
对于NSMutableArray、NSMutableDictionary、NSMutableSet等可变的对象,插入空元素时crash
正确做法是加判断,sample code如下所示:
NSDictionary *dic;
NSMutableArray *arr=[NSMutableArray new];
if (dic) {
[arr addObject:dic];
}
NSLog(@"%@",arr);
加非空的判断条件: if(dic)
2、越界和指针空的判断
这种crash类似于C++,对于NSArray类型的对象,当调用objectAtIndex时一定要判断是否越界。
指针OC开发中使用的不多,如果要用也一定要判断是否为空
3、添加NSNotification后,在dealloc函数中,一定要removeObserve
4、创建NSTimer定时任务,在dealloc函数中,一定要invalidate
5、当你在代码中发起了网络请求,并且设置的代理,那么在dealloc函数中一定要释放掉改代理,因为网络访问是有时间的,当网络数据回来之后发现代理对象不在了,这个时候就会发生crash
6、使用高版本的api,因为每个app都有使用的iphone版本,当用户机器使用的是低版本系统,如果遇上你的高版本API必定会crash
7、占用内存过多,在收到两次内存警告就会crash,所以该释放的东西一定要及时释放
8、多线程并发操作引发的crash,在多并发环境中,如果一个线程已经将数据删除,另外一个线程去访问,因数据不在必然会crash,所以一定要通过加锁机制来解决问题
9 、调用不存在的类或方法
if(NSClassFromString(@"MFMailComposeViewController”)) respondsToSelector: