为什么我只分配了 7 MB 内存就收到内存警告?

2024-01-02

我正在 iPod touch 设备上运行我的 iOS 应用程序并且即使总分配峰值只有 7 MB,我也会收到内存警告如下图(推送游戏场景时会出现这种情况):

What 我觉得奇怪就是它:

  • the 左峰值(时间 0.00)对应于分配的 20 MB 内存(介绍场景)尽管如此,并没有给出任何内存警告。

  • the 中心峰值(时间 35:00)相当于分配了大约 7 MB 的内存(游戏场景正在推送)并且确实给出内存警告。

我不明白为什么如果总内存只有 7 MB,我会收到这些警告。这是正常的吗?我怎样才能避免这种情况?

查看分配密度,我们可以看到以下模式,(对我来说)在推入介绍场景的时刻 (0.00) 和推入游戏场景的时刻 (35.00) 之间没有太大差异。由于密度峰值相似,我认为内存警告是由于我无法发现的其他原因造成的.

EDIT:

我一直在遵循使用“活动监视器”的建议,但不幸的是,我的应用程序在加载游戏场景时崩溃了仅分配 30 MB 内存。这是活动监视器报告。

查看报告,我可以看到实际内存使用总量约为 105 MB。鉴于这应该指的是 RAM 内存,并且考虑到我的模型应该具有256 MB http://appleinsider.com/articles/10/09/08/teardown_of_apples_4th_gen_ipod_touch_finds_256mb_of_ramRAM 这不应导致应用程序崩溃或内存泄漏问题。

我运行泄漏监视器,它在我的应用程序上没有显示任何泄漏。我还杀死了所有其他应用程序。

然而,通过分析该报告,我看到了令人惊讶的情况167 MB 虚拟内存值与我的应用程序关联。这是正常的吗?这个值是什么意思?这可能是崩溃的原因吗?我如何检测代码的哪些区域对此负责?

我的 iPod 是第四代型号,容量(内存)为 6.4 GB,只有 290 MB 可用内存。我不确定这是否会以某种方式影响虚拟内存paging http://en.wikipedia.org/wiki/Paging表现。

编辑2:我还更多地研究了SpringBoard,它的虚拟内存使用量是180 MB。这是正常的吗?我找到了一些问题和答案 https://stackoverflow.com/questions/3558931/springboard-memory-allocation-iphone-ipad这似乎表明 SpringBoard 负责自动释放对象(它应该是管理屏幕和主页按钮的过程,但我不确定它是否也与内存管理有关)。它是否正确?

另一个注意事项。我正在使用ARC。但是我不确定这与问题有多大关系,因为没有明显的内存泄漏,并且 XCode 应该转换代码,添加对编译的二进制文件的释放/释放/保留调用。

编辑3:正如之前所说,我使用ARC和Cocos2d(2.0)。我一直在玩活动监视器。我发现如果我删除 GameCenter 身份验证机制,那么活动监视器运行正常(新的疑问:其他人有类似的问题吗? GameCenter 身份验证视图是否保留在某处?)。然而我注意到,每次我在 GameScene 之前的各个场景之间来回导航时(初始场景 -> 角色选择 -> 行星选择 -> 角色选择 -> 行星选择 -> 等等.. -> 角色选择 ..)真实内存使用情况增加。一段时间后,我开始收到内存警告,并且该应用程序被 iOS 杀死。现在的问题是:

-> 我是否以正确的方式替换场景?我从不同的场景调用以下内容:

[[CCDirector sharedDirector] replaceScene: [MainMenuScene scene]];

I have Cocos2d 2.0 作为静态库而replaceScene的代码是这样的:

-(void) replaceScene: (CCScene*) scene
{
    NSAssert( scene != nil, @"Argument must be non-nil");

    NSUInteger index = [scenesStack_ count];

    sendCleanupToScene_ = YES;
    [scenesStack_ replaceObjectAtIndex:index-1 withObject:scene];
    nextScene_ = scene; // nextScene_ is a weak ref
}

我想知道场景是否无法正确分配。我验证了清理方法正在被调用,但是我还添加了一个CCLOG调用CCLayer的dealloc方法并重建静态库。结果是dealloc方法好像没有被调用.

这是正常的吗? :D

我发现其他人也有类似问题 http://www.cocos2d-iphone.org/forums/topic/cclayer-vs-ccscene-somewhat-confused/。我想知道这是否与保留循环和自块。 https://stackoverflow.com/questions/7853915/how-do-i-avoid-capturing-self-in-blocks-when-implementing-an-api我真的需要花一些时间研究这个,除非从编辑 3 开始,任何人都可以告诉我我做错了什么:-)


iOS 中运行的所有应用程序进程共享的所有内存容量。因此,其他应用程序可能会使用大量内存,并且您的应用程序也会收到内存警告。您将收到内存警告,直到内存不足为止。

要了解应用程序中内存实际发生的情况,您应该

  1. 使用泄漏分析您的应用程序(ARC 不能保证您没有泄漏,即自捕获问题)。

  2. 使用堆快照分析(此处简要描述http://bentrengrove.com/blog/2013/4/26/heapshot-analysis http://bentrengrove.com/blog/2013/4/26/heapshot-analysis)

并查看这篇关于 iOS 中的内存和虚拟内存的文章:http://liam.flookes.com/wp/2012/05/03/finding-ios-memory/ http://liam.flookes.com/wp/2012/05/03/finding-ios-memory/

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

为什么我只分配了 7 MB 内存就收到内存警告? 的相关文章

  • iOS7及以上版本中如何在接收器和扬声器之间切换音频输出?

    我有一个音频播放器 可以选择在接近传感器通知 1 时将音频输出从扬声器切换到接收器 耳机 无论是否连接耳机 以下是我执行此操作的代码 void switchAudioOutput NSString output AVAudioSession
  • 在 UITableView 中设置滚动位置

    我有一个应用程序 其工作方式与 iPhone 的 联系人 应用程序的工作方式有些相似 当我们添加新的联系人时 用户将被定向到包含联系人信息的仅查看屏幕 如果我们从导航栏中选择 所有联系人 用户将导航到查看最近添加的联系人的所有联系人列表 我
  • 如何修复C风格的for语句?

    什么是正确的修复方法C 风格的 for 语句对于下面发布的代码 目前我正在交战 C 风格的 for 语句已弃用 并将在将来删除 斯威夫特的版本 var ifaddr UnsafeMutablePointer
  • 如何更改 UISwitch 关闭状态的默认颜色?

    我想更改 UISwitch 中 onTintColor 的颜色以表示关闭状态 切换位于表格视图中 并且以编程方式进行切换 settingsSwitch setBackgroundColor UIColor whiteColor settin
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • 为什么永久代空间不断增长?

    我读过几篇文章 我理解以下内容 如果我错了 请纠正我和 或编辑问题 java堆是这样分段的 年轻代 创建的对象放在这里 这部分被频繁且廉价地垃圾收集 老一代 在年轻代的垃圾收集中幸存下来的对象会移到此处 该区域的垃圾收集频率较低 并且使用对
  • 从 Plist 中存储和检索 [重复]

    这个问题在这里已经有答案了 可能的重复 iOS 在 plist 文件中存储两个 NSMutableArray https stackoverflow com questions 6070568 ios store two nsmutable
  • 在界面生成器/故事板中设置 UIButton 图像

    我有一个视图控制器 我在故事板中添加了一个圆形矩形按钮 该应用程序运行良好 我还使用故事板将按钮连接到 segue 我正在尝试为此按钮设置一个自定义图像以用于其开和关状态 我如何访问此按钮并设置其属性 在本例中为开和关图像 这是一个屏幕截图
  • 如何等待 webViewDidFinishLoad 完成

    我有一个初始化 webView 的布尔条件 并在 webViewDidFinishLoad 中加载另一个委托 以便在完成完成后触发 但是 由于布尔值在条件 webViewDidFinishLoad 之前返回 因此页面永远不会完全加载 如何确
  • 使用隐藏的 SFSafariViewController 获取 Safari cookie

    我正在阅读以下关于从移动网页到本机 iOS 9 应用程序对用户进行身份验证的文章 并且想知道如何最好地实现类似于下面讨论的隐藏控制器的隐藏 safari 视图控制器 https library launchkit io how ios 9
  • 如何在我的 iOS 项目中添加和执行 .sql 文件?

    我找到了很多关于在 iOS 中使用 SQLite 数据库的教程 但没有找到任何直接引用 sql 文件的内容 谁能告诉我如何将现有的 SQL 数据库链接到我的应用程序 编辑 这是一个 MySQL 转储 我们有一个基于浏览器的抽认卡程序 现在我
  • 尝试从独立的 Apple Watch 应用发出网络请求

    当应用程序是独立应用程序时 Apple Watch 是否无法进行网络通话 即使手表已连接到 iPhone 我正在使用新的独立应用程序目标 它没有附带可以发出 WatchConnectivity 请求的配对 iOS 应用程序 我十有八九收到
  • 如何从 NSString 中删除十六进制字符

    我面临一个与字符串中的某些十六进制值相关的问题 我需要从字符串中删除十六进制字符 The problem is when i print object it prints as BLANK line And in debug mode it
  • iPad 3 中配备 Xcode 4.2 和 Retina 的 iOS 5.1

    我有一台装有 Mac OS X Snow Leopard 的 Mac 我可以添加 iOS 5 1 吗 使用 iPad 3 的新分辨率 我们将如何处理图像 因为如果该应用程序将在 iPhone 3GS 4 和 iPad 3 中运行 我认为我们
  • 在模拟器中运行应用程序时删除本地通知的 iOS 权限警报

    我正在尝试编写验收测试KIF https github com kif framework KIF在一个很早就要求本地通知权限的应用程序上 不幸的是 由于 iOS 模拟器安全原因无法使用 KIF 自动接受 iOS 权限警报 https gi
  • 如何在 EKRecurrenceRule 中设置一周中某一天的数组?

    我想在用户选择的特定日期每周添加事件 可以是一个或多个 也可以是一整天 我将用户选择的日期值存储在模型类变量中 但是 当我添加事件并选择日期时 假设今天是星期一 我选择星期二和星期三并保存 然后我查看周一和周三添加的 iPhone 日历 我
  • 具有多种自定义单元格类型的 RxSwift 表视图

    我想知道是否有任何代码示例RxSwift当我可以在一个表视图中使用多个自定义单元格时 例如 我有两个部分 第一部分有 10 个单元格 类型为CellWithImage标识符和第二部分有 10 个带有类型的单元格CellWithVideo标识
  • 应用未能及时恢复

    我在一个非常具体的场景中遇到 未能及时恢复 崩溃 我认为与看门狗相关 仅在从后台恢复时 并且仅在进入后台后在很短的时间内执行此操作 a最多几秒钟 这似乎是相关的崩溃日志 Incident Identifier E30F2238 5B15 4
  • iOS 发送 iMessage 尽可能简单

    我希望能够以编程方式发送 iMessage 除了调用一个将文本发送到带有消息的号码的函数之外 无需执行任何其他操作 这两个消息都是文本框 我真的很感激一些示例代码 因为我在网上搜索过 但我发现没有任何帮助 这不适用于商业应用程序 仅适用于我
  • iOS 对 Google 云消息传递的支持

    我在谷歌的开发者控制台中看到 GCM 允许为 iOS 生成 API 密钥 我在网上搜索了有关如何在 iOS 应用程序中通过 GCM 实现推送通知的任何类型的文档 但没有找到答案 真的有可能在 iOS 应用程序中使用 GCM 实现推送通知 j

随机推荐