
这是我的设置:
我有一个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内存泄漏所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)