【问题标题】:May many webviews cause my app to crash on my iphone 4?许多 webviews 会导致我的应用在我的 iphone 4 上崩溃吗?
【发布时间】:2012-09-30 14:16:52
【问题描述】:

//重点

我逐渐将许多对象(UIWebView)加载到内存中,一段时间后它崩溃了。请帮忙

//详情

我有一个带有水平分页的 UIScrollView,其中每个页面(带有单独的视图控制器)都包含一个禁用用户交互的 UIWebView。起初只有第 0 页上的 webview #0 被加载,随着我在页面中前进,应用程序逐渐发送请求以加载特定数据。下载的数据保留在内存中。

从互联网源加载大约 20 个 Webview 后,我的应用程序冻结并崩溃。如果我使用存储在设备上的虚拟 html 字符串,这会在我加载大约 50 个 webview 后发生。但问题依然存在。

我修复了大部分漏洞,只剩下 Mallocs。由于加载少量 UIWebviews 不会出现问题,因此我假设我必须将代码更改为 3 个 webviews 并重用它们。但我不知道这是否能解决问题。我已经开发了几个不会崩溃的应用程序,这是一个独特的案例。

我将指向 webview 的指针和每个 Webview 中的一些其他元素(例如标签)存储在数组中。每加载一个新页面,数组的计数就会增加。

我使用 xcode 4.3 和越狱的 iphone 4 进行开发。我关闭了在我的 xcode 中要求签名,因此应用程序被复制到我的手机上但无法附加到进程。我无法在手机上调试。我的应用在模拟器中运行良好,但在我通过点击图标在手机上启动它后会崩溃一段时间。

根据我的描述,您认为可能是什么问题? 谢谢

【问题讨论】:

  • 如果你不想创建好的应用程序停止使用越狱设备,如果你不能调试你的代码就不是很好。

标签: iphone objective-c ios xcode debugging


【解决方案1】:

是的,当然有太多的UIWebViews 会因为内存不足而导致崩溃。我不确定您拥有多个 UIWebViews 的原因是什么,但我会按照您的想法重复使用较少数量的 UIWebViews,而不是创建多个。

基于您的设备在使用少量时不会崩溃,我会说问题在于使用了太多UIWebViews,而不是与您的越狱设备的兼容性问题。

【讨论】:

  • 谢谢,我也相信这是由于 UIWebview 使用过多。
【解决方案2】:

WebKit 因占用内存而臭名昭著。它会分配大块内存并在让您有机会释放其他资源之前失败。一个UIWebView 已经够糟糕了。我在只有 5 个UIWebViews 的应用程序中遇到过这个问题,更不用说 50 个了。

您可以尝试几件事。一,如果网页不是太复杂,您可以使用替换视图,例如DTCoreText 来呈现它们。如果您必须拥有 webviews,您可以缓存各种 HTML 内容并使用 UIWebView 重新渲染。

【讨论】:

  • 谢谢!这是有道理的,要彻底废除 WebView 的使用。我为当前包含 UIwebview 的每个 UIView 使用 ViewController。 HTML 实际上非常简单,可以使用 UIImage 和标签进行重构。如果我用一个 Uiimage 和 5 个标签替换每个 Webview,你认为性能会有很大提升吗?
  • 如果这就是您的网络视图所显示的全部内容,那么它一定会更快。不过,请考虑 DTCoreText (github.com/Cocoanetics/DTCoreText),因为它直接从 HTML 呈现图像和样式文本。
【解决方案3】:

您只需要使用三个 UIWebView 进行分页。假设用户在第 2 页(第 1 页是左页,第 3 页在右页)。当用户滑动到第 3 页时,您可以只在第 3 页的第 1 页上显示当前的 web 视图。当用户在页面之间滑动时,您需要重新加载正确的 html。

通过对网页内容进行一些缓存,下载内容后速度应该不会成为问题。

【讨论】:

    猜你喜欢
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多