使用 UIWebView loadRequest 的常规块 56、1024、8、244、24 内存泄漏

2024-04-28

我遇到了内存泄漏,但无法通过泄漏、构建/分析或整体检查来找出如何修复。我有一个非常强烈的想法,这是由于我的 UIWebview 加载 JavaScript 的 loadRequest 命令造成的,但我不知道出了什么问题。

这是我的设置:

我有一个 tabbarcontroller,我以编程方式创建了 4 个视图控制器:分别是一个表视图、一个地图视图、另一个表视图和一个 Web 视图。

  • 第一个表格视图显示静态数据。
  • 地图视图显示注释,单击该注释会填充第四个选项卡(即 Web 视图)的变量,并切换到 Web 视图以显示本地存储的 html/javascript 文件(即 3D 模型)
  • 第二个表格视图列出了地图视图中每个注释所代表的所有相同信息,只是以表格形式呈现。它在填充变量、在 web 视图中切换和显示 html/javascript 文件方面具有相同的功能
  • webview 显示加载的 html/javascript 文件,如果没有,它显示一个 UIAlertView 以从地图视图或列表中选择一个

当我最终从 webview 执行 loadRequest() 时,最初一切正常。但是,当我开始在选项卡之间切换并查看不同的 3D 模型时(即,转到地图视图,单击注释以显示模型 x,观察它在 Web 视图中加载,然后切换到列表并单击一行以显示模型) y(或 x )并观察它在 web 视图中加载)我开始在 ipad 上收到内存泄漏,而不是模拟器。这些内存泄漏几乎总是:常规块 56、1024、8、244 和 24,并且没有负责的帧、库或堆栈跟踪可供跟踪。

在网络视图中,如果我注释掉 loadrequest 行或使用 request object = nil 执行 loadrequest,我没有内存泄漏,但是当我切换到使用指向本地文件的 url 对象时(我什至尝试将其指向 google) .com,其中有 javascript)它会爆发内存泄漏。

我尝试过执行以下每一项操作:

  • [self.webView loadRequest:nil];
  • [self.webView loadHTMLString:@"" baseURL:nil];
  • [self.webView停止加载];

在我的 webViewController 的 viewWillDisappear 中,试图完全清除 webview 以供将来重用,但它似乎没有多大帮助。我也尝试在执行 loadRequest 之前执行此操作,但我遇到了相同的内存泄漏。

  • 仅供参考,我正在运行最新的 xcode 4.0.2,ipad 有最新的更新,4.3.2
  • 在上一篇文章中我评论过但没有收到回复(一般块内存泄漏 https://stackoverflow.com/questions/5470121/generalblock-56-memory-leak-when-calling-loadrequest-in-uiwebview/5736448#5736448)我相信问题与以下事实有关:当我切换视图时,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 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;

WebViewController.m:

- (void) viewDidLoad {
[super viewDidLoad];
NSLog(@"in webview did load");

self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 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];
}

如果您有任何建议或更正,我将不胜感激。我有不到 1 周的时间来解决这个问题,如果您能给我任何见解,我将非常感谢。

thanks!

-Mike


迈克,我不知道你是有意还是无意地关注了?

- (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?
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 UIWebView loadRequest 的常规块 56、1024、8、244、24 内存泄漏 的相关文章

  • 在 Objective-C iPad 开发中发布

    我正在尝试发出 POST 请求 但我似乎无法弄清楚出了什么问题 我从服务器收到响应 但我的电子邮件 密码对似乎没有正确发送 读取 由服务器 它告诉我不存在这样的帐户 这是我的代码 它包含在一个函数中 当用户按下我创建的 登录 按钮时调用该函
  • 如何在 iOS 中通过 3G 连接创建无线热点

    如果我愿意 我将如何创建一个像这样的应用程序MyWi http intelliborn com mywi html 即 WiFi 网络共享应用程序 实现该功能需要哪些步骤 我需要使用哪些框架 库 我们的目标不是尝试将此应用程序放入应用程序商
  • iPhone 应用程序名称有哪些限制? (它们记录在[哪里]?!)

    我花了 2 天 和很多头 墙重击 终于发现临时分发对我不起作用的原因是因为我的应用程序名称包含 UTF 8 字符 我仍然对像苹果 iPhone 这样广泛的国际平台如何禁止这种行为感到困惑 i e 如果我的应用程序是一款中国围棋游戏 我是否可
  • UIWebView stringByEvaluatingJavaScriptFromString 在后台

    在 iOS 应用程序中 我正在运行一个相当大的脚本UIWebView using stringByEvaluatingJavaScriptFromString 就 JavaScript 字符串的长度而言较大 调用 JavaScript 后会
  • 检测 iPad Safari 用户的最佳方法

    添加用于检测 iPad Safari 用户的代码的最佳方法是什么 我的意思是我们应该使用 1 CSS 通过链接媒体 2 JS 通过navigator对象 我听说使用用户代理字符串并不是检测 iPad 的最佳方法 因为存在不一致的情况 请建议
  • 如何在 iphone 和 ipad 的通用应用程序中调用 [[UIScreen mainScreen] 缩放]

    我正在制作一个可以在 ipad 和 iphone 上运行的通用应用程序 到目前为止一切顺利 但我刚刚将我的 SDK 更新到 ios4 并且想要调用 UIScreen mainScreen scale scale 不在 3 2 sdk 中 并
  • 如何跟踪数据库连接泄漏

    我们有一个应用程序似乎存在连接泄漏 SQL Server 表示已达到最大池大小 我独自一人在我的开发机器上 显然 只需导航应用程序 我就会触发此错误 SQL Server 活动监视器显示大量正在使用我的数据库的进程 我想查找哪些文件打开连接
  • iPhone签名捕捉

    是否可以通过电缆 USB 连接将签名从 iPhone 传输到 xls 文件 因此 这可能不完全是您正在寻找的内容 但这就是我捕获用户 用手指 手写笔 绘制的签名的方式 您的 UIImageView 将具有绘制的签名 我没有考虑过如何将签名图
  • iOS 中的视频可以进行反卷积吗?

    我想拍摄击球手挥动棒球的镜头 但球棒很模糊 视频为 30 fps 通过研究 我发现反卷积似乎是最小化运动模糊的方法 但我不知道是否或如何在我的 iOS 应用程序后处理中实现它 我希望有人能给我指出正确的方向 比如如何在 iOS 中应用反卷积
  • 锁定时 AVAudioPlayer 在 iPhone 5 中不播放音频

    使用 AVAudioPlayer 我尝试在 iphone 播放器播放时播放声音 当设备锁定时也是如此 问题是 在 iPhone 4s ios 7 中 效果很好 但在带有 6 和 7 ios 的 iPhone 5 上没有任何反应 In the
  • 在 Objective-C 中比较两次的最好/最简单的方法是什么?

    我有一个时间的字符串表示形式 例如 11 13 AM 这是使用 NSDateFormatter 和 stringFromDate 方法生成的 我想将此时间与当前时间进行比较 但是当我使用 dateFromString 方法将字符串转回日期时
  • 仅 CSS 下拉菜单不像 iPad 等。跟随菜单链接而不显示菜单

    我们在这里创建了一个新网站 www worthingleisure co uk splashpoint 它的顶部有一个纯 CSS 菜单 通过使用 li hover ul 方法并适当显示和隐藏 该菜单应该适用于 iPad iPhone 和其他
  • 免费实时货币换算汇率 xml feed url [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 提供实时更新 xml 数据源以集成到 iPhone 应用程序中的任何链接 您可以尝试这些 xml 文件 http www ecb int
  • dequeueReusableCellWithIdentifier: 如何工作?

    我想要一些精确的信息dequeueReusableCellWithIdentifier kCellIdentifier 如果我理解得很好 下面的 NSLOG 应该只打印一次 但事实并非如此 那么 dequeueReusableCell 的意
  • 当方向改变时,视图控制器会为我做什么?

    一个简单的iphone程序 由项目模板View based Application生成 有几个按钮 我添加了以下代码 void showInfo UIView view NSLog view bounds 6 2f 6 2f 6 2f 6
  • 如果部署目标 < 基础 sdk,如何检查是否使用了不可用的方法?

    我想知道当部署目标低于基础 SDK 时 您如何检查代码是否不调用不可用的方法 可以在 SDK 等于部署目标的设备上运行应用程序 但我搜索一种更 自动 的方式 任何想法 问候 昆汀 最简单的方法是使用 IPHONE OS VERSION MA
  • 使用 facebook connect for iPhone 上传照片的记录流程

    看完之后 我确实在 Facebook 论坛上看到了这篇文章 link http forum developers facebook com viewtopic php id 30467 他们正在向 facebook 对象提供 UIImage
  • 以编程方式将 UITextField 设置为编辑模式

    我有一个UITextField我想以编程方式设置为编辑模式 屏幕上的键盘和文本字段框中的光标 我知道当此视图出现在屏幕上时 用户将处于编辑模式 因此我希望用户不必点击文本字段 a 的 编辑 属性UITextField是只读的 所以这是行不通
  • Android 和 iPhone 应用程序可以使用同一个 Facebook 应用程序 ID 吗?

    我有两个具有相同名称和相同功能的应用程序 一款在安卓市场 一款在应用商店 目前仅通过 iPhone 应用程序 您可以使用我创建的 Facebook 应用程序将您的分数发布到 Facebook 墙上 我的问题是我可以使用相同的 Android
  • Xcode 找不到我的静态库!

    这是链接器错误 i686 apple darwin10 gcc 4 2 1 Users william Documents SettingsLibrary build Debug iphonesimulator libSettingsLib

随机推荐

  • Ant 复制文件而不覆盖

    Is there any command in ant to copy files from one folder structure to another without checking the last modified date t
  • 如何从默认标签栏删除底部

    我需要添加一个没有应用栏的选项卡栏 我从 StackOverflow 获得了一个使用灵活空间的解决方案 它正在工作 但它在选项卡栏底部产生了额外的不需要的空间如何删除或隐藏它 我的完整代码 import package flutter ma
  • 尝试在 Angular 项目中导入 date-fns 时,Jest 测试失败

    我最近将我的一个 Angular 项目更新到 Angular 13 更新后 我在尝试在项目中运行单元测试时遇到了一些奇怪的错误 我在一个新的 Angular 项目中创建了一个最小的示例来重现此行为 import format from da
  • HotSpot使用的Mark-Compact算法是什么?

    当阅读 Mark Compact 章节时垃圾收集手册 https rads stackoverflow com amzn click com 1420082795 提出了一系列替代方案 但其中大多数看起来很旧 理论上 例如 2 指压缩和 L
  • 纱线堆的使用量随着时间的推移而增长

    我们在 AWS EMR 上运行 Spark Streaming 作业 该作业将稳定运行 10 到 14 小时 然后崩溃 并且 stderr stdout 或 Cloudwatch 日志中没有明显错误 在此崩溃之后 任何重新启动作业的尝试都将
  • 在运行时在 iOS 上添加框架

    首先 我将描述我的用例 说明为什么我需要在 iOS 上运行时添加框架 假设我在 iOS 设备上有一个应用程序 该应用程序需要一些第三方框架来添加一些外部功能 现在 功能有很多 所以 所需的框架数量也会很多 用户可能不需要很多功能 只是一小部
  • 重新格式化 csv 文件

    我有这个 csv 文件 其中只有两个条目 这里是 Meat One Abattoirs Exporters Food Delivery Butchers Retail Meat Dealers Retail Meat Freezer Mea
  • R语言赋值

    我想知道 R 语言中的赋值是如何工作的 考虑以下 R shell 会话 gt x lt c 5 6 7 gt x 1 lt 10 gt x 1 10 6 7 gt 我完全理解 创建向量 5 6 7 并将其绑定到 符号 x 之后 x 会反弹到
  • Objective-C 类别导致无法识别的选择器

    我的项目有一个UIImage我想从另一个类调用的类别函数 我正确导入了图像类别的头文件 并且在没有警告的情况下编译了项目 问题是当我打电话时UIImage类别函数我看到一个无法识别的选择器错误NSInvalidArgumentExcepti
  • 缺少 /var/lib/mysql/mysql.sock 文件

    我正在尝试访问 mysql 当我运行 mysql 命令时 我得到以下信息 root ip 10 229 65 166 tpdatabase 1 8 0 28356 mysql 错误 2002 HY000 无法连接到 通过socket本地My
  • 如何在 NavHostFragment 中检索当前片段?

    我试图在新的导航组件中找到一种方法 但我没有找到任何相关内容 我当前的目的地是 mainHostFragment findNavController currentDestination 但我无法获得对显示片段的任何引用 参考显示的片段 A
  • 仅使用 fprintf 和 fscanf 替换文本文件中的字符串

    抱歉问这么简单的问题 这是我作业的一部分 我被困住了 如你看到的 include
  • Spring中需要多个相同类型的bean

    将其标记为重复之前的请求 我浏览了论坛 但在任何地方都找不到该问题的解决方案 我正在使用 Spring 3 2 编写代码 一切都是纯粹基于注释的 该代码接收从不同 XSD 文件派生的 XML 文件 所以我们可以说 有五个不同的 XSD A1
  • 在 Python 中使用 argparse 处理无效参数

    我在用argparse https docs python org 2 library argparse html解析命令行参数 默认情况下 在收到无效参数时 它会打印帮助消息并退出 是否可以自定义 argparse 在收到无效参数时的行为
  • Nonetype 错误/使用 python 的 beautifulsoup 没有打印任何元素

    所以我尝试使用 python 比较 2 个列表 其中一个包含我从网站获取的 1000 个链接 另一个包含一些单词 这些单词可能包含在第一个列表的链接中 如果是这种情况 我想得到一个输出 我打印了第一个列表 它确实有效 例如 如果链接是 ht
  • Powershell CMD.exe 和路径中的空格

    我在使用执行命令时遇到问题cmd exe在 PowerShell 中 问题是命令的路径中有空格 似乎是 PowerShell 的普遍问题 以下是摘录 base dir resolve path this path has spaces in
  • 有没有办法查看 Docker for Windows 上的容器磁盘使用情况?

    我很好奇除了作为容器映像一部分的层之外 是否还有一种方法可以查看正在运行的 Windows 容器使用了多少磁盘空间 基本上 容器自创建以来 增长 了多少 在 Linux 或在 HyperV 中运行的 Linux 容器 中 这将是docker
  • 熊猫在移动的数据帧上滚动

    这是一段代码 我不明白为什么在最后一列 rm 5 上 前 4 项得到 NaN 我知道对于 rm 列 前 4 项未填充 因为没有可用数据 但如果我移动列计算 应该进行 不是吗 同样 我不明白为什么 rm 5 列中有 5 个而不是 4 个项目是
  • AWS 上的多租户应用程序 - 多个 SSL 证书安装策略

    我正在为 Rails 多租户应用程序做一些规划 并且想知道处理自定义域证书的最佳方法是什么 应用程序是相当沼泽标准 ELB 应用程序服务器和多租户数据库 在我当前的用例中 每个租户都有一个自己独有的应用程序子域 这通常是通过通配符证书来处理
  • 使用 UIWebView loadRequest 的常规块 56、1024、8、244、24 内存泄漏

    我遇到了内存泄漏 但无法通过泄漏 构建 分析或整体检查来找出如何修复 我有一个非常强烈的想法 这是由于我的 UIWebview 加载 JavaScript 的 loadRequest 命令造成的 但我不知道出了什么问题 这是我的设置 我有一