gpt4 book ai didi

ios - UIWebView 不释放内存

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:44 25 4
gpt4 key购买 nike

我已经在 Stackoverflow 和互联网上检查了所有相关问题和答案,但我没有得出结论。我正在开发一个 ipad 应用程序,它所做的是向我的 Web 服务器发出请求,将 pdf 文件下载为 NSData 并将其显示在 UIWebView 中。问题是即使应用程序(关闭)从 pdfviewer 转到 mainviewcontroller,内存也不会释放,因此一直增加内存使用量。它从 14 mb 开始,然后每次我从主 Controller 转到 pdfviewer 时它加起来。因为我使用的是 arc,所以我无法释放它。我也在清除缓存。

Mainview controller.m

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

if([segue.identifier isEqualToString:@"showpdf"]){
PdfViewer *pdfviewer=(PdfViewer*)[segue destinationViewController];
pdfviewer.ReportID=TheReportID;
pdfviewer.TabID=_TabID;
}

}

PdfViewer.h

@property (strong, nonatomic) IBOutlet UIWebView *MainWebView;

PdfViewer.m

-(void)viewDidLoad
{
NSURL *url = [NSURL fileURLWithPath:filePath];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_MainWebView loadRequest:request];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

if([segue.identifier isEqualToString:@"ShowMain5"]){
MainViewController *mv=(MainViewController*)[segue destinationViewController];
mv.TabID=_TabID;
}

}
-(void)dealloc{
NSLog(@"test");
}

我也尝试以编程方式添加 UIWebview 而不是 IBoutlet,但仍然无法解决问题。

以编程方式(替代)

 @implementation PdfViewer

UIWebView *webview;

- (void)viewDidLoad
{
webview=[[UIWebView alloc]initWithFrame:CGRectMake(35, 35, 768,959)];
[webview loadRequest:request];
[self.view addSubview:webview];
}

当用户按下后退按钮时,我所做的就是模态返回 mainviewcontroller。所有 segues 都是模态 FYI。

据我所知,pdfviewer 在返回到 mainviewcontroller 时不会调用 dealloc 我检查过之前是否有人对 viewcontrollers 有类似的问题,我发现了这个问题 UIViewController -dealloc method not called现在我认为内存保持在同一水平,但现在它给出了 pdfviewer is not in the window hierarchy 错误。

最佳答案

根据我使用 UIWebView[s] 的经验,解决方案是为其创建一个单例实例,所以至少这个基本接口(interface)和属性

 // MXMWebView.h
@interface MXMWebView : NSObject <UIWebViewDelegate, UIScrollViewDelegate> {

}

+ (instancetype)sharedInstance;

@property(nonatomic, strong) UIWebView *webView;

 //MXMWebView.m
@implementation MXMWebView

@synthesize webView;
@synthesize delegate;

#pragma mark - Singleton Methods

+ (instancetype)sharedInstance {
static id _sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedInstance = [[self alloc] init];
});

return _sharedInstance;

关于ios - UIWebView 不释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25999969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com