Monotouch + UIWebView = 随机崩溃

4
我正在使用iOS 5.0的iPhone和iPad上最新稳定版本的Mono/Monotouch/MonoDevelop。我有一个UIWebView,在模拟器中从未崩溃,但在实际设备上会随机出现EXC_BAD_ACCESS错误。根据我阅读的所有关于UIWebView的内容,这很可能是由于UIWebView在加载完成之前被释放引起的。
以下是我在ViewDidLoad()中使用的代码:
var urlAddress = BASE_URL + _page;
var nsURL = new NSUrl(urlAddress);
var nsURLRequest = new NSUrlRequest(nsURL);

_webView.Tag = 10;
_webView.ScalesPageToFit = true;
_webView.AutosizesSubviews = true;

_webView.LoadStarted += HandleWebViewLoadStarted;
_webView.LoadFinished += HandleWebViewLoadFinished;
_webView.LoadRequest(nsURLRequest);

this.Add(_webView);

有什么想法,为什么在实际设备上会随机崩溃,但在模拟器中却从未发生?
1个回答

4

我需要查看崩溃细节和更多的源代码才能百分之百确定,但我相信这是因为您的NSUrlRequest实例被声明为局部变量而导致的。将此变量提升为类型的字段应该可以解决这个问题。

一旦方法完成执行,可能仍然需要该实例。但此时它不再被引用,垃圾收集器可以随时回收它。如果被回收了,那么您可能会遇到像您提到的崩溃。

事实上,在模拟器上不会发生这种情况,很可能是因为它比设备快,代码可以在GC收集该实例之前完成。换句话说,它可能会崩溃,这只是一个时间问题,使它大多数情况下在模拟器上运行,几乎永远不会在设备上运行。


谢谢,那就是崩溃的原因,测试时没有实体设备确实让人头痛。 - Jarred Capellman
很高兴它有帮助。您能否将问题标记为已回答(在投票下面的绿色标记),以便其他寻找相同问题的人可以看到答案可用。谢谢! - poupou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接