iOS常见crash有关问题及crash日志分析

iOS常见crash问题及crash日志分析

第一、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: