作者Elfiend (小孩)
看板MacDev
标题[问题] 遇到Crash时,除错的流程
时间Wed Aug 7 02:21:21 2013
前言:
想了解大家在处理crash问题时,
思路大约都是哪些方向,
希望能了解原理,这样遇到问题时,才不会不知道怎麽办。
下面先列出我想了解的问题,
以及我对此问题的想法,
希望有大大能帮我检查是否有错误观念,并帮我补完完整观念‧
ps. 环境是ipad,不是iphone‧
版本是ios 6。
(以前的版本没有auto reference counting(ARC)?)
(iphone跟ipad的autorelease pool有不同使用需求? 有ARC後还有差别?)
问题一:
会造成crash的主因有哪些?
问题二:
必定会crash的流程,可能的情形有哪些?解决的方式?
问题三:
不一定会crash的流程,可能的情形有哪些?解决的方式?
===
我知道的:
呼叫已经free掉的物件必定会crash掉。
例如某个button的TouchUpInside事件里,
{
UIViewController *pView;
[self presentViewController:pView animated:YES completion:nil];
}
因为pView只存在这个function里,
去执行presentViewController就会造成crash。
因为当view didload时,该view就被free了。
解决的方式是在.h档里宣告全域变数,这样才不会执行完button事件,ViewController就被free掉了。
我不知道的:
若档案A里,有button event会presentViewController 档案B,
而档案B里,也有button event会presentViewController 档案C,
(就是A->B->C)
此时档案C里,有button event会直接返回档案A,
[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES];
档案B跟C有使用AVPlayer,在画面一直切换的情况下,
可能会在档案B的presentViewController那行Crash,
也可能会在档案C,dismiss那行Crash,
这种不稳定的状况,发生原因可能是什麽?
因为dissmiss造成memory leak吗?
在拥有实机,可以看到error msg,以及machine code的情况,
我可以检查什麽来判断问题?
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.24.71.234
1F:推 kiii210:Zombie+Instrument 前几天才被救一次 08/07 09:51
2F:推 abcdefghi:跑analyze, memory profiling, xcode的工具全部查一遍 08/07 15:43