UIWebView 应用程序因内存压力而崩溃

Posted

技术标签:

【中文标题】UIWebView 应用程序因内存压力而崩溃【英文标题】:UIWebView app crashes with memory pressure 【发布时间】:2014-08-20 10:51:51 【问题描述】:

我正在 tableview 中加载一个 webView。

textboby=[[UIWebView   alloc]initWithFrame:CGRectMake(10, 250, 280, 1)];
textboby.userInteractionEnabled=YES;
textboby.scrollView.scrollEnabled=NO;
textboby.backgroundColor=[UIColor clearColor];
textboby.delegate=self;
textboby.tag=12;
[cell.contentView addSubview:textboby];
textboby.hidden=YES;

并在webView中加载html字符串如下:

htmlurl = [[NSBundle mainBundle] bundleURL];
NSString *htmlString =[[NSString alloc] initWithFormat: @"<html>"
                       "<head><meta charset=\"utf-8\"> <style type=\"text/css\">"
                       "body imgwidth:280px;background-color:black;iframewidth:280px;background-color:black;"
                       "</style></head>"
                       "<bod/Users/nuevalgo/Desktop/AjelProject/Aajil/AJDetailInView.hy style=\"font-family:'GE Dinar Two';width:280px;\"><div style='direction:rtl;width:260px;white-space:pre-wrap;padding-right: 20px;'>%@</div>"
                       "</body>"
                       "</html>",detailobj.body];
[textboby loadHTMLString:htmlString baseURL:htmlurl];

我需要根据 web 视图的偏移高度来设置 TableView 的行高。 我能够做到这一点如下:

-(void)webViewDidFinishLoad:(UIWebView *)webView
    detailTable.scrollEnabled = YES;
    textboby.hidden=NO;
    NSString *heighttmp=[textboby stringByEvaluatingjavascriptFromString:@"document.body.offsetHeight"];

    CGRect adjustedFrame = textboby.frame;
    adjustedFrame.size.height = 1;
    textboby.frame = adjustedFrame;

    CGSize frameSize;
    frameSize = [textboby sizeThatFits:CGSizeZero];
    adjustedFrame.size.height = frameSize.height ;
    adjustedFrame.size.width=280;
    textboby.scrollView.contentSize=CGSizeMake(280, frameSize.height);
    textboby.frame = adjustedFrame;

    height=[heighttmp intValue]+260;
   [detailTable beginUpdates];
    [detailTable endUpdates]; 

它工作正常,但是当 [heighttmp intValue] 超过 50,000 的限制时,我的应用程序意外退出导致内存压力。可能是什么原因?有什么解决办法吗?

【问题讨论】:

你找到解决办法了吗? 我正在寻找相同的... 【参考方案1】:

您是否正在将 Web 视图加载到表格视图的每个单元格中?这几乎可以肯定是个坏主意。表格视图单元格设计为屏幕高度的一部分,而不是 50,000 点高。

您可以将您的网络视图放入UIPageViewControllerUITabBarController 中吗?这两种容器控制器都具有为您管理屏幕外资源的优势,因此一次只有一个 Web 视图会占用内存。

【讨论】:

以上是关于UIWebView 应用程序因内存压力而崩溃的主要内容,如果未能解决你的问题,请参考以下文章

当我使用 Photos.app 时,我的 iOS 应用程序因内存压力而终止

如何解决一个较早启动但现在“因内存压力而终止”的应用程序?

如何解决一个较早启动但现在“因内存压力而终止”的应用程序?

应用程序因内存使用率非常低而崩溃 iphone/iPad

当图像保存在核心数据的集合视图中时,应用程序因内存错误而崩溃

应用程序仅在 iPhone 8 iOS 14.4.1 上因内存不足而崩溃