iphone – 使用UIWebView loadRequest的General-Block 56,1024,8,244,24内存泄漏

iphone – 使用UIWebView loadRequest的General-Block 56,1024,8,244,24内存泄漏,第1张

概述我得到了内存泄漏,我无法通过泄漏,构建/分析或整体检查如何修复.我有一个非常强烈的概念,那是由于我的UIWebview加载 javascript的loadRequest命令,但我无法弄清楚是什么问题. 这是我的设置: 我有一个tabbarcontroller,我使用4个视图控制器以编程方式创建:表视图,mapview,另一个表视图和webview. >第一个tableview显示静态数据. > m 我得到了内存泄漏,我无法通过泄漏,构建/分析或整体检查如何修复.我有一个非常强烈的概念,那是由于我的UIWebvIEw加载 javascript的loadRequest命令,但我无法弄清楚是什么问题.

这是我的设置:

我有一个tabbarcontroller,我使用4个视图控制器以编程方式创建:表视图,mapvIEw,另一个表视图和webvIEw.

>第一个tablevIEw显示静态数据.
> mapvIEw显示注释,点击时填充第4个选项卡的变量,webvIEw,并切换到webvIEw以显示本地存储的HTML / JavaScript文件,这是一个3d模型
>第二个tablevIEw是mapvIEw中每个注释所代表的所有相同信息的列表,只是表格形式.它在填充变量,切换和显示webvIEw中的HTML / JavaScript文件方面具有相同的功能
> webvIEw显示加载的HTML / JavaScript文件,如果没有显示UIAlertVIEw从mapvIEw或列表中选择一个

当我最终从webvIEw执行loadRequest()时,最初一切正常.然而,当我开始在标签之间切换并查看不同的3D模型时(即转到地图视图,单击注释以显示模型x,在webvIEw中观看它,然后切换到列表并单击一行以显示模型y(或者x也是)并且在webvIEw中观察它的负载)我开始在ipad上接收内存泄漏,而不是模拟器.这些内存泄漏几乎总是如下:General-Block 56,1024,8,244& 24并没有负责任的框架,库或堆栈跟踪跟进.

在webvIEw中,如果我注释掉loadrequest行或者使用请求对象= nil执行loadrequest,我没有内存泄漏,但是当我切换到使用指向本地文件的url对象时(我甚至尝试将其指向Google .com,它有JavaScript)它在内存泄漏中爆发.

我试图做以下每一件事:

> [self.webVIEw loadRequest:nil];
> [self.webVIEw loadHTMLString:@“”baseURL:nil];
> [self.webVIEw stopLoading];

在我的webVIEwController的vIEwWilldisappear中尝试完全清理webvIEw以便将来重用,但它似乎没有提供太多帮助.我还尝试在执行loadRequest之前执行此 *** 作,但我得到了相同的内存泄漏.

> fyi,我正在运行最新的xcode 4.0.2,ipad有最新的更新,4.3.2
>从上一篇文章我发表评论并且没有收到回复(general-block memory leak)我相信这个问题与webvIEw不知道如何在切换视图时完全摆脱JavaScript这一事实有关
>我使用一个没有JavaScript的简单HTML文件进行了测试,并且通用块内存泄漏消失了.但是,我得到其他cfnetwork / http消息内存泄漏,但这是一个不同的故事,而不是我目前关注的问题.

下面是单击mapVIEw上的其中一个注释的示例代码,它触发webVIEwController中的loadModel函数:

- (voID) mapCallOutpressed: (UIVIEw *) sender {NSInteger selectedindex = sender.tag;MyLocation *selectedobject = [_mapVIEw.annotations objectAtIndex:selectedindex];MyModel *model = selectedobject.model;NSLog(@"Model selected from mapvIEw = %@",model.description);// Get reference to the webvIEw from the tabbarController (vIEwController's index=3)WebVIEwController *webVIEwController = [self.tabbarController.vIEwControllers objectAtIndex:3];webVIEwController.model = model;[webVIEwController loadModel];    // Switch tabs to the webVIEwself.tabbarController.selectedindex = 3;[self.tabbarController.selectedVIEwController vIEwDIDAppear:YES];

下面是我的webVIEwController.h& .M:

WebVIEwController.h:

WebVIEwController : UIVIEwController <uiwebviewdelegate> {UIWebVIEw *webVIEw;Nsstring *templateRunfilePath;MyModel *model;Nsstring *templateRunTitle;@property (nonatomic,retain) UIWebVIEw *webVIEw;@property (assign) MyModel *model;@property (nonatomic,copy) Nsstring *templateRunfilePath;@property (nonatomic,copy) Nsstring *templateRunTitle;-(voID) loadModel;

WebVIEwController.m:

- (voID) vIEwDIDLoad {[super vIEwDIDLoad];NSLog(@"in webvIEw dID load");self.webVIEw = [[UIWebVIEw alloc] initWithFrame:CGRectMake(0,self.vIEw.bounds.size.wIDth,self.vIEw.bounds.size.height)];self.webVIEw.delegate = self;self.webVIEw.autoresizingMask=(UIVIEwautoresizingFlexibleHeight | UIVIEwautoresizingFlexibleWIDth);self.webVIEw.scalesPagetoFit = YES;[self.vIEw addSubvIEw:self.webVIEw];}- (voID) vIEwWillAppear:(BOol)animated {if (self.model) {            self.tabbarController.navigationItem.Title = [Nsstring stringWithFormat: @"%@ - %@",self.tabbarController.navigationItem.Title,self.model.description];}else {    UIAlertVIEw *msg = [[UIAlertVIEw alloc] initWithTitle:@"No Model Selected"                                                   message:@"Please select a model from the map or List tab to vIEw."                                                  delegate:nil                                         cancelbuttonTitle:@"OK"                                         otherbuttonTitles:nil];    [msg show];    [msg release];}}- (voID) loadModel {Nsstring *localURLPath = [Nsstring stringWithFormat:@"%@/%@/%@",self.templateRunfilePath,self.model.foldername,self.model.modelfilename];NSURL *url = [NSURL fileURLWithPath:localURLPath];NSURLRequest *requestObj = [NSURLRequest requestWithURL: url];[self.webVIEw loadRequest:requestObj];}- (voID)webVIEwDIDFinishLoad:(UIWebVIEw *)webVIEw {   [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];}-(voID)vIEwWilldisappear:(BOol)animated {NSLog(@"webvIEw vIEw will disappear");[super vIEwWilldisappear:animated];//[self.webVIEw loadRequest:nil];//[self.webVIEw loadHTMLString:@"" baseURL:nil]; self.webVIEw.delegate = nil; }- (voID)dealloc {    self.webVIEw.delegate = nil;[self.webVIEw release];[super dealloc];}

如果您有任何建议或更正,我将非常感激.我有<一周的时间来解决这个问题,如果你能给我任何见解,我将非常感谢你. 谢谢! -麦克风

解决方法 迈克,我不确定你是故意还是误 *** 作?

- (voID) loadModel {[self.webVIEw loadHTMLString:@"" baseURL:nil]; // here you are loading... or you have trIEd with commenting it also?Nsstring *localURLPath = [Nsstring stringWithFormat:@"%@/%@/%@",self.model.modelfilename];NSURL *url = [NSURL fileURLWithPath:localURLPath];NSURLRequest *requestObj = [NSURLRequest requestWithURL: url];[self.webVIEw loadRequest:requestObj];   // again here you are also loading?}
总结

以上是内存溢出为你收集整理的iphone – 使用UIWebView loadRequest的General-Block 56,1024,8,244,24内存泄漏全部内容,希望文章能够帮你解决iphone – 使用UIWebView loadRequest的General-Block 56,1024,8,244,24内存泄漏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1081732.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存