iPhone开发-模拟内存警告

2023-12-31

背景:

我有一个标签栏应用程序。每个选项卡都包含导航控制器,允许用户从一个视图转换到另一个视图,显示数据的深入信息(每个视图都由视图控制器处理,每个视图控制器类都有didReceiveMemoryWarning方法)。通过从 Web 服务中提取数据来填充列表。

Problem:

当我使用iPhone模拟器的“硬件>模拟内存警告”选项时,didReceiveMemoryWarning我的所有视图控制器都会调用该方法 - 即使是用户正在查看的视图控制器。我不想清除活动视图控制器正在使用的任何内容。我怎样才能做到这一点?

哪个方法应该实现在内存警告释放数据后重新加载数据? (我看到包含表视图调用的视图控制器类viewDidLoad当用户返回到该视图时的方法,但如果该视图包含(例如 UIWebView),则viewDidLoad方法未被调用。这是为什么?)

已编辑(2009 年 1 月 30 日星期五 - 下午 03:10)

(注意:我使用界面生成器来创建视图,并且loadView方法已被注释掉。)

因此,当视图控制器收到内存警告消息时,将执行以下步骤:

  1. 调用以下方法:

    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning]; 
    }
    
  2. 由于致电[super didReceiveMemoryWarning], [self setView:nil]被自动调用?

  3. 如果需要清除任何资源,那么setView应重写方法以清除本地资源。

  4. [self setView:nil]如果视图当前处于活动状态(默认情况下),则不会调用。正确的? - 我真的很好奇哪种方法会做出这个决定以及如何做出?

能否请您确认一下。另外,我按照这种方法遇到了错误,但添加myObject = nil释放后myObject in dealloc控制器类的方法解决了这个问题。谢谢。


这是一个老问题,但我没有看到正确的答案,所以这里是:

当收到内存警告时,-didReceiveMemoryWarning在所有视图控制器中被调用,无论它们是否是“当前”视图控制器。视图控制器只是监听内存警告事件广播。

如果在出现内存警告时视图控制器的视图未被使用,控制器将通过将该属性设置为 nil 来卸载它。它如何知道视图是否被使用?按视图的-superview财产。如果view.superview为零,该视图不属于任何树,可以安全卸载。

一旦发生这种情况,控制器的-viewDidUnload被叫。这是卸载任何插座以及将在其中重新创建的任何内容的正确位置-viewDidLoad.


那么什么是-didReceiveMemoryWarning为了?您的控制器可能具有在访问之前不会实例化的对象。例如,您可能有一个控制器,有时需要文件中的大量数据,但并非总是如此。您可以为其设置一个属性,如下所示:

- (NSData*)bigChunkOfData {
  // Get data from our instance variable _data, read from disk if necessary
  if (_data == nil) {
    _data = [[NSData alloc] initWithContentsOfFile:@"/path/to/data"];
  }
  return _data;
}

这将第一次从磁盘读取数据,然后将其保存在实例变量中。自从_data变量是按需创建的,我们在内存不足的情况下卸载它是安全的:下次我们需要它时它会再次创建。

- (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];

  [_data release];
  _data = nil;  // <-- Very important: don't leave strong references dangling.
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iPhone开发-模拟内存警告 的相关文章

  • UIButton 触摸事件落入底层视图

    我创建了一个小UIView其中包含两个UIButton是 视图响应UITapGesture事件 按钮应该响应TouchUpInside 但是当我点击按钮时 响应者是底层视图 并且点击手势选择器被触发 寻找意见或建议 您可以修改橙色视图中响应
  • AVAudioRecorder 标准化音量

    我有一个可以录制音频的应用程序 我想知道如何才能增加增益 有没有办法标准化音频或以某种方式放大它 谢谢 豪伊 看来我找到了解决方案 根据文档 AVAudioPlayer 音量可以在 0 0 到 1 0 之间 显然它可以设置为大于1 0的值
  • Xcode 4 .xib 创建 iPad 版本

    我有一台 iPhone xib 我想将其变成 iPad xib 在 Xcode 3 中 有一个 创建 iPad 版本 菜单选项 我如何在 Xcode 4 中执行此操作 我目前调整了 xib 的大小 但是当我打开模拟项目 导航栏等 时 它会将
  • 如何在iPhone中制作UIButton垂直滑块菜单

    在我的应用程序中 我想制作带有滚动视图的 UIButton 滑块 其中当我们滚动按钮的 uiscrollview 时 按钮将位于中心 请参阅这些应用程序的第一个屏幕 sothttp itunes apple com au app id422
  • 以编程方式将 UITextField 设置为编辑模式

    我有一个UITextField我想以编程方式设置为编辑模式 屏幕上的键盘和文本字段框中的光标 我知道当此视图出现在屏幕上时 用户将处于编辑模式 因此我希望用户不必点击文本字段 a 的 编辑 属性UITextField是只读的 所以这是行不通
  • iOS模拟器找不到SDK,可能需要重新安装SDK

    在这里 我遇到了另一个问题 今天正在开发一个 iOS 应用程序 当我运行 iPhone 5 0 模拟器的应用程序时 仅在该模拟器上遇到了一些奇怪的问题 当我尝试一次又一次地运行该模拟器时 我的 MacBook 屏幕上出现了两个弹出警报窗口
  • 如何使用编译时间作为自动版本控制信息?

    当程序被编译以获得一种自动版本信息时 是否有任何常量或 pragma来获取时间和日期 DATE and TIME 是预定义的宏 将分别扩展到当前日期和时间
  • 如何防止字符串被截留

    我的理解 可能是错误的 是 在 C 中 当你创建一个字符串时 它会被实习到 实习生池 中 这保留了对字符串的引用 以便多个相同的字符串可以共享操作内存 但是 我正在处理很多很可能是唯一的字符串 一旦完成每个字符串 我需要将它们从操作内存中完
  • phonegap 插件,用于从库中选择视频

    我需要能够从库中选择视频并将其上传到我的服务器 我可以录制新视频 captureVideo 并上传 文件传输 没问题 但我似乎找不到任何方法来打开视频库并选择视频然后上传 有什么办法可以做到这一点吗 以某种方式更改 MediaType na
  • 如何链接到 App Store (iTunes) 中我的应用程序?

    我希望我的应用程序中有一项功能 用户可以使用我的应用程序的 iTunes URL 向朋友发送电子邮件 这怎么可能 Thanks 您可以创建更简单 更合乎逻辑的 App Store 链接 而不是通常看到的又长又混乱的 URL iTunes S
  • 苹果游戏中心 API

    我无法找到包含 Game Center Reference 的 GameKit api Apple Game Center 是 iOS 上的一个新社交网络平台 其描述如下 iOS4 中的新增功能 1 GameKit iOS 参考在这里 ht
  • iPhone表情插入MySQL却变成空值

    我们正在开发一个 iPhone 应用程序 它将表情符号从 iPhone 发送到服务器端 PHP 并插入到 MySQL 表中 我正在做服务器端的工作 但是insert语句执行成功后 插入的值变成空了 我可以正确插入字段 varchar 的是文
  • UITableView 无法一直滚动到底部[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我只是好奇 我做了一些UITable
  • 使用 iPhone 控制蓝牙音频设备

    我正在寻找为 iPhone 编写应用程序 它将能够控制汽车中的收音机和 CD 播放器 收音机和播放器具有可用的蓝牙连接 我开始这个问题是为了获得这个地方所需的所有信息 我有几个问题 但如果您发现任何我没有要求的对我开始开发此应用程序不重要的
  • 如何通过我的 ios 应用程序的指示打开苹果地图应用程序

    我的目标是从 ios 应用程序打开带有方向的地图应用程序 我可以打开地图应用程序 但它没有显示方向 我编写的代码如下 NSString mystr NSString alloc initWithFormat http maps apple
  • 如何检测 iOS 8 上的包含应用程序是否启用了应用程序扩展?

    我正在 iOS 8 beta 上开发一个自定义键盘 我想告诉用户如果我的自定义键盘未启用 如何在包含应用程序中启用它 有什么方法可以检测应用程序扩展是否已启用 首先让我们设置一些常量 以便于彼此理解 包含应用程序 安装扩展并保存扩展二进制文
  • 基于 JavaScript 的 iPhone UI 框架

    我们有一个基于推送的网络应用程序 最近 我们计划为其制作一个 iPhone 应用程序 就像 Facebook 拥有 iPhone 应用程序和网站一样 我们正在寻找一个可以让我们快速前进的 UI 框架 我翻阅过PhoneGap http ww
  • 禁用 iPhone 4S / 新 iPad 键盘上的听写按钮

    我们的应用程序是一个医疗保健应用程序 我们的应用程序中有一个符合 HIPAA 标准的语音识别器 所有听写都可以通过它进行 医院不希望医生意外开始与不符合 HIPAA 标准的 Nuance Dragon 服务器进行对话 因此 我正在寻找可以抑
  • 延迟图像下载完成后更新 UITableViewCell

    异步下载单元格图像后 我在更新 UITableViewCells 时遇到一些问题 我正在使用自定义 UITableViewCells 如下所示 UITableViewCell tableView UITableView tableView
  • 如何检测 UISearchBar/UITextField 输入中的暂停?

    我有以下 UISearchbar 代码 void searchBar UISearchBar searchBar textDidChange NSString searchText UIApplication sharedApplicati

随机推荐

  • 将 Web API 控制器端点添加到 Kestrel Worker 项目

    我有一个带有 TCP 管道的 NET Core 辅助项目 并且想要向其中添加一个 HTTP 控制器端点 我基本上 创建了一个新的工人项目 用于复制目的 在我添加的 csproj 文件中
  • SQL:如何像 SELECT TOP @amount 中那样使用 TOP 参数? [复制]

    这个问题在这里已经有答案了 使用 vs2008 查询生成器 我尝试创建一个查询 获取 TOP 命令 然后我遇到错误 顶部表达式错误 Works SELECT TOP 5 FROM dbo SomeTable WHERE SomeColumn
  • 在mvc4的_layout中显示数据库中的图像

    大家好 我正在享受我的 layout如下 它按照我的要求工作 但是这里有几件事让我震惊 即我想显示我写的相应图像 如下所示 if Session UserName null div class logged in a title Your
  • 尽管存在链接,RSpec 仍应有_link 失败

    我的 RSpec 测试一直失败 subject page visit user path user it should have link Settings href edit user path user 但是当我自己加载页面时 我可以看
  • GET curl 调用不返回 JSON 对象

    curl D X GET H Authorization Basic H Content Type application json https jira net rest api latest search jql assignee ww
  • Php - Pdo SSH 隧道

    现在我正在创建一个 ssh 隧道 这样我就可以连接到我的远程数据库 但由于某种原因连接仍然拒绝 我的脚本 try host remote host sshuser ssh user sshpass ssh password dbuser d
  • Rust:如何逐块读取文件

    我对生锈完全陌生 我想逐块 块读取文件 每个块应包含 16 个字节 并将其 对于此测试场景 写入另一个文件 f2 所以我首先在这里尝试使用以下代码 let mut buf 0 16 let mut count 0 for byte in f
  • “const”和“val”有什么区别?

    我最近读到了有关const关键字 我很困惑 我找不到任何区别const和val关键字 我的意思是我们可以使用它们来创建一个不可变变量 还有什么我遗漏的吗 consts 是编译时常数 这意味着它们的值必须在编译时分配 这与vals 可以在运行
  • 获取当前位置后如何停止更新位置?

    我正在使用 Parse 并使用 geoPointForCurrentLocationInBackground 一旦收到位置 我就可以停止更新 而无需手动停止它 如何使用 CLLocationManager 收到位置后立即停止更新位置 Edi
  • 减少授权大小 python AWS Lambda@Edge

    我正在尝试在我的云前端发行版中实施授权 到目前为止它一直有效 直到我遇到尺寸限制 我现在遇到了 cloudfront 错误消息Max allowed 1048576 大约约为 1MB 但是安装完之后authlib包总大小约为6MB 我验证令
  • 干净地中断 HttpListener 的 BeginGetContext 方法

    我正在使用一个Http监听器 http msdn microsoft com en us library 34xswsd2 28v vs 100 29 aspx并使用开始获取上下文 http msdn microsoft com en us
  • 如何在 Codable 结构中添加自定义瞬态属性

    我有以下可按预期工作的可编码结构 struct VideoAlbum Codable let id image String let video mediaType JSONNull let type deleted createdOn S
  • 我应该将参数存储类说明符放在函数定义中还是同时放在声明和定义中?

    我正在努力将一些旧的 K R 代码移植到 ANSI C 因此我正在编写缺少的函数原型声明 很多函数定义的参数都带有寄存器存储类 但我不确定函数原型中是否可以省略寄存器存储类说明符 无论有或没有寄存器存储类特定声明 代码都能正确编译 我尝试了
  • 是否可以将多个静态库捆绑到一个静态库中[C++]?

    我为我的 C 代码创建了一个静态库 该库依赖于 CentOS 7 环境中的 Boost OpenSSL CURL 和 Threads 可以捆绑吗libboost system a libssl a libcrypto a libcurl a
  • 更改 MediaStream 对象的 VideoTrack

    简而言之 我正在尝试改变VideoTrack of a MediaStream object 文档 https developer mozilla org en US docs WebRTC MediaStream API https de
  • 如何在记事本++中进行非贪婪的正则表达式查询?

    我正在用乳胶写论文 不小心写了 cite 代替 cite 我可以手动浏览整个文档 但我想知道如何使用正则表达式在记事本 中执行此操作 我最初尝试过 cite 并替换为 cite 1 适用于简单的情况 例如 cite hello world
  • Oracle SQL:如何通过预定义贡献获取每个组的随机记录

    这是参考此处描述的先前问题 Oracle SQL 如何获取每组的随机记录 https stackoverflow com questions 36628912 oracle sql how to get random records by
  • Paypal付款成功后返回Ionic应用程序

    我创建了一个 Ionic 应用程序 我有一些物品要订购 付款是使用 Paypal 完成的 我使用 window open url 调用了一个 web url 它将我重定向到 Paypal 我能够成功付款 但是有人可以告诉我付款成功后如何返回
  • 在 SAS 中,捕获语法错误的好技术/选项是什么?

    在增强的编辑器中 颜色可能会给您提示 然而 在大型机上 我不相信编辑器中有任何东西可以帮助您 I use OPTIONS OBS 0 noreplace obs 0 选项指定从输入中读入 0 个观测值 dataset 和 NOREPLACE
  • iPhone开发-模拟内存警告

    背景 我有一个标签栏应用程序 每个选项卡都包含导航控制器 允许用户从一个视图转换到另一个视图 显示数据的深入信息 每个视图都由视图控制器处理 每个视图控制器类都有didReceiveMemoryWarning方法 通过从 Web 服务中提取