带有 uiwebviews 内存泄漏的基于页面的应用程序

Posted

技术标签:

【中文标题】带有 uiwebviews 内存泄漏的基于页面的应用程序【英文标题】:page based app with uiwebviews memory leak 【发布时间】:2013-02-01 12:50:00 【问题描述】:

我正在使用 Arc 对简单的 Xcode 页面基础应用程序进行一些测试。

我在 dataviewcontroller 中加载了一个 uiwebview,我一直在使用 Instruments 测试活动,当我滚动页面时,内存使用量不断上升,看起来以前的页面永远不会从内存中释放。

这是我对默认模板所做的更改。 我已将模型修改为运行 240 页而不是 12 个默认值。

在 dataViewController 中,我以编程方式添加 uiwebview 并向 google 加载请求并将 webview 添加到控制器视图。

内存使用量从大约 20Mb 开始,最终超过 70Mb,然后崩溃。

有人知道我哪里出错了吗? 如何释放视图以释放内存?

修改代码如下:

DataViewController.h

#import <UIKit/UIKit.h>
@interface RXBDataViewController : UIViewController<UIWebViewDelegate>

    UIWebView *pageContent;


@property (strong, nonatomic) IBOutlet UILabel *dataLabel;
@property (strong, nonatomic) id dataObject;

@end

DataviewController.m

#import "RXBDataViewController.h"
@interface RXBDataViewController ()
@end

@implementation RXBDataViewController

- (void)viewDidLoad

    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    pageContent = [[UIWebView alloc] initWithFrame:CGRectMake(8, 30, 260, 350)];
    pageContent.userInteractionEnabled = NO;
    [pageContent setDelegate:self];

    [pageContent loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]];
    [self.view addSubview:pageContent];    


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


- (void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];
    self.dataLabel.text = [self.dataObject description];

@end

提前感谢您的建议。

【问题讨论】:

请将您的解决方案作为答案发布,然后选择它作为您问题的答案。 *** 不是一个论坛,也不像一个论坛。如需更多信息,请阅读faq。 Ta,我看不到回答我自己问题的按钮。 【参考方案1】:

我找到了解决办法

- (void)viewDidDisappear:(BOOL)animated

    [pageContent removeFromSuperview];
    pageContent = nil;

【讨论】:

以上是关于带有 uiwebviews 内存泄漏的基于页面的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

ios UIWebView中的大量内存泄漏

iPhone - 内存泄漏 - NSData dataWithContentsOfUrl & UIWebView

字体字形 / UIWebView 中的内存泄漏

在 UIWebview 中加载带有帖子的 URL 的问题

WKWebView中MessageHandler的内存泄漏问题解决过程

带有分页的全屏 UICollectionView 内的 UIWebView