单点触控 + UIWebView = 随机崩溃

发布于 2024-12-23 04:32:24 字数 653 浏览 3 评论 0原文

我在 iOS 5.0 iPhone 和 iPad 上使用 Mono/Monotouch/MonoDevelop 的最新稳定版本。我有一个 UIWebView,在模拟器中永远不会崩溃,但是在实际设备上它会随机崩溃在 EXC_BAD_ACCESS 上。根据我读到的有关 UIWebViews 的所有内容,最有可能发生在 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);

有什么想法为什么它会在实际设备上随机崩溃,但永远不会在模拟器中崩溃?

I'm using the latest stable releases of Mono/Monotouch/MonoDevelop on a iOS 5.0 iPhone and iPad. I have a UIWebView that in the emulator never crashes however randomly on the actual devices it crashes on EXC_BAD_ACCESS. Based on everything I've read with UIWebViews that most likely occurs when the UIWebView gets disposed before it finishes loading.

Here is the code I am using in my 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);

Any ideas why it would crash on the actual device randomly, but never in the emulator?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心头的小情儿 2024-12-30 04:32:24

我需要查看崩溃详细信息和更多源代码才能 100% 确定,但我确实相信这是因为您的 NSUrlRequest 实例被声明为局部变量而引起的。 将此变量提升到您类型的字段中应该可以解决此问题。

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

它在模拟器上没有发生的事实可能是因为它更快(比设备)并且代码可以在 GC 收集该实例之前完成。 IOW,它可能会崩溃,这只是一个计时问题,使它大部分时间在模拟器上工作,而几乎不在设备上工作。

I would need to see the crash details and a but more of source code to be 100% certain but I do believe it's caused because your NSUrlRequest instance is declared as a local variable. Promote this variable into a field of your type should solve this.

The instance could still be required once the method is completed it's execution. However at that time it's not referenced anymore and the garbage collector can collect it anytime. If collected then you'll likely get a crash like you mentioned.

The fact it does not occur on the simulator is likely caused because it's faster (than the device) and the code can complete before the GC collect that instance. IOW it could crash it's just a timing thing that makes it work most of the time on the simulator and almost never on devices.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文