0

//这个点

我逐渐将许多对象(UIWebView)加载到内存中,过了一会儿它崩溃了。请帮忙

//细节

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

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

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

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

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

从我能够描述的情况来看,您认为可能是什么问题?谢谢

4

3 回答 3

0

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

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

于 2012-09-30T15:01:09.380 回答
0

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

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

于 2012-09-30T14:35:19.147 回答
0

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

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

于 2012-09-30T14:29:41.197 回答