Iphone 使用UIWebView loadRequest的常规块56、1024、8、244、24内存泄漏
我遇到了内存泄漏,我无法通过泄漏、构建/分析或全面检查找出修复方法。我有一个非常强烈的想法,那就是这是由于我的UIWebview加载javascript的loadRequest命令造成的,但我不知道是什么错了 以下是我的设置: 我有一个tabbarcontroller,我通过编程创建了4个视图控制器:一个表视图、一个mapview、另一个表视图和一个webviewIphone 使用UIWebView loadRequest的常规块56、1024、8、244、24内存泄漏,iphone,ipad,memory-leaks,uiwebview,mkmapview,Iphone,Ipad,Memory Leaks,Uiwebview,Mkmapview,我遇到了内存泄漏,我无法通过泄漏、构建/分析或全面检查找出修复方法。我有一个非常强烈的想法,那就是这是由于我的UIWebview加载javascript的loadRequest命令造成的,但我不知道是什么错了 以下是我的设置: 我有一个tabbarcontroller,我通过编程创建了4个视图控制器:一个表视图、一个mapview、另一个表视图和一个webview 第一个表视图显示静态数据 mapview显示的注释在单击时填充第四个选项卡webview的变量,并切换到webview以显示本地存
- 第一个表视图显示静态数据
- mapview显示的注释在单击时填充第四个选项卡webview的变量,并切换到webview以显示本地存储的html/javascript文件,该文件为三维模型
- 第二个tableview是mapview中每个注释所表示的所有相同信息的列表,只是以表格的形式。它在填充变量、切换和在webview中显示html/javascript文件方面具有相同的功能
- webview显示加载的html/javascript文件,如果没有,则显示UIAlertView以从mapview或列表中选择一个
- [self.webView loadRequest:nil]李>
- [self.webView loadHTMLString:@“baseURL:nil]李>
- [self.webView停止加载]李>
- 仅供参考,我正在运行最新的xcode 4.0.2,ipad有最新的更新,4.3.2
- 在我之前的一篇文章中,我发表了评论,但没有收到()的回复。我认为问题在于,当我切换视图时,webview不知道如何完全摆脱javascript
- 我用一个没有javascript的简单html文件做了一个测试,一般的块内存泄漏消失了。然而,我收到了其他cfnetwork/http消息内存泄漏,但这是另一回事,目前我并不担心
- (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 webView
self.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;
如果您有任何建议或更正,我将不胜感激。我有一周的时间来解决这个问题,如果您能给我一些见解,我将非常感谢您
谢谢
-迈克迈克,我不确定你是故意跟随还是错误跟随
- (void) loadModel {
[self.webView loadHTMLString:@"" baseURL:nil]; // here you are loading... or you have tried with commenting it also?
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]; // again here you are also loading?
}
请查看加载后的注释。。。留言电话。谢谢你的快速回复,拉文,这实际上是我当时正在尝试的东西,但它不起作用,它是故意的。
[self.webView loadHTMLString:@”“baseURL:nil]
已被删除后续:当使用本地html文件仅加载非常大的静态图像(也存储在本地)时,我绝对没有内存泄漏,这与我最初关于接收cfnetwork/http错误的声明相反。很明显,我已经改变了上次观察时的一些东西,这些东西已经停止了泄漏。但是当我切换到加载指向包含javascript(3d模型)的html的对象时,泄漏又回来了。因此uiwebview肯定在努力完成javascript计算,或者有什么东西被拖来拖去,没有完全停止javascript操作只是为了让你知道我面临的是什么,对于我在webView中显示的每10个html/javascript 3d模型,它会产生大约15-20个泄漏,一旦存在一对,从那以后,它非常接近于指数——在尝试不同的东西时,我在调用loadModel之前清除了webview对象:基本上,我取消webview的委托,释放webview,取消它,然后从我的viewDidLoad执行代码。这似乎不会导致泄漏,但在我收到内存警告和应用程序崩溃之前,我只加载了大约2-3个网络视图。我现在收到的唯一泄漏似乎是大量的通用块56、一对288和一两个1024。到底是什么改变了我不能告诉你,但现在它似乎只限于这三种
- (void) loadModel {
[self.webView loadHTMLString:@"" baseURL:nil]; // here you are loading... or you have tried with commenting it also?
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]; // again here you are also loading?
}