一、跟IOS有关的:基本上这类crash就是违反IOS规范而被终止的
1、watchdog timeout
透过一个timer去观察某个事件(通常是网络存取)是否已经超过预期的时间,如果是的话就发出中断,告诉OS结束此程式,最主要的原因都是因为synchronous http request导致整个界面动弹不得,毫无反应。
1)Exception code: 0x8badf00d
2)Don't block main thread
3)Use API for asynchronous URL request
2、User force-quit
使用者会强制结束程式的执行可能就是因为程式在某些情景下没有反应,所以这种状况也会被视为crash而写入crash report
1)Exception Type: 00000020
2)Exception Codes: 0xdeadfall
3、low memory termination
由字面上的意思可以很轻易了解这就是因为可用内存不足而导致程式被终止。
一下注意的地方:
1、一定要注意内存不足的通知
2、如果物件暂时不会用到并且要用到的时候还可以重新创建的话,用完的时候顺手释放
3、释放事前快取起来的物件
最上面的通常就是目前运行中的程序,如果OS收到内存不足的警告会去终止背景执行的程序,如果还是不够,那就会去终止最上面的程序。
Current resident pages:当前瞬间所占用的page数
Count:该行程序所占用的页数(pages)
UUID:Universally Unique IDentifier
jettisoned:因为内存不足而被从内存中删除
active:运行中
如果内存管理的不好,可能会造成Memory leak,这时候我们可以善用XCode上的工具来检查
1、Run->Run With Performance Tool->(Instrument) Leak
2、Build and Analyze
二、程序本身的BUG导致:没有固定的Exception Codes & Type
最常犯的三个错误:
1、Over-released objects
2、Null pointer dereference
3、Insert nil object