使用 Instruments 分析内存泄漏 - iPhone 4 和 iOS 5 模拟器之间的巨大差异

2024-01-02

当使用 Instruments 分析我的应用程序(查找内存泄漏)时,我使用 iOS 5 iPhone 模拟器得到的结果与使用运行 iOS 5 的 iPhone 4 得到的结果截然不同。第一张图片显示了使用真实设备进行分析的结果,第二个是模拟器:

真实设备:


iOS 5 模拟器:

在这两种情况下,此配置文件都会在应用程序中的同一点进行:在 rootViewController 的视图生命周期中完成 viewDidLoad。我一直在等待它们的总分配内存稳定下来。正如您在设备图表中看到的,在 00:10 左右发生了一些极端波动,而模拟器中不存在这种波动。在真实设备上,总分配内存在 00:08 左右从 1MB 跳至 3.5 MB,然后回落至 1.5 MB,最后跳至 4.74,并在此稳定。为模拟器分配的内存更加线性,它稳定快速地攀升至稳定的 2.35 MB 左右。

另一件需要注意的事情是设备上存在 2.25 MB 的已分配内存,但不是来自 malloc 的模拟器和来自 CFNumber 的 700+ KB。由于我对使用仪器和分析相对较新,因此我不确定这是否正常。谷歌快速搜索没有发现任何明确的结果。这 2.25 MB 和 700 KB 足以弥补内存分配的差异。为了平衡,模拟器测试中存在更多具有不同内存量的 malloc 条目,但设备测试中不存在这些条目。

另外,我发现当第二个 UIViewController 被推入 UINavigationController 堆栈时,分配的内存在真实设备上跳到大约 8.5-9 MB,但只有大约 4.5 到 4.5 MBtops在模拟器上。

我知道设备的性能与模拟器有很大不同,但是内存分配是否应该非常相似,因为两个设备上运行相同的代码?如果这是性能分析,我会理解,但对于内存分配,这些数字似乎应该非常相似。谁能解释一下这是否正常?


这种行为是可以预料的。从技术上讲,当您使用模拟器运行分析时,您正在根据桌面硬件测量统计数据。即使您只是分析分配,您也不能期望它们以类似的方式工作,因为许多软件优化/算法/等都是基于其运行的硬件。

不幸的是,Apple 没有 iOSemulator。不过,您最好使用设备进行分析,因为模拟器往往仍然不可靠且速度慢(例如 Android 模拟器)。

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

使用 Instruments 分析内存泄漏 - iPhone 4 和 iOS 5 模拟器之间的巨大差异 的相关文章

  • 在 iOS safari 中禁用选择上下文菜单

    我想禁用在 iOS Safari 网络浏览器 中选择特定文本后出现的默认上下文菜单 那可能吗 这是可能的 请参阅这个例子 http jsfiddle net z9ZNU 基本上 重要的部分是设置正确的 css 属性 body webkit
  • iOS 显示 UIImage 全屏并启用缩放(捏合和双击)

    我有一个UIImage从相机捕获UIImagePickerController 现在 在用户单击它之后 我希望它显示全屏 并且能够使用捏合手势进行放大和缩小 还可以使用双击手势来放大特定区域 换句话说 我想模拟ios默认图像浏览器的功能 我
  • 使用 Swift 更改整个应用程序中的 UILabel 文本颜色

    在 Swift 中有什么方法可以在整个应用程序中立即更改 UILabel 的文本颜色属性吗 我尝试过使用外观属性 但这不适用于 UILabel textColor 任何方式或任何同样工作的库 一种方法是使用颜色设置 首先在您的 xcasse
  • 即席分发失败

    我在一家大公司工作 正在开发一个适用于 iOS 5 的 iOS 应用程序 分发应用程序的唯一方式是通过临时部署 我拥有自己的服务器已经有一段时间了 由 o2switch 法国托管商 托管 当我开始开发时 我们使用它来部署应用程序以进行 Be
  • 如何在 iPhone 应用程序的 url 中传递字符串值

    NSURLRequest request NSURLRequest requestWithURL NSURL URLWithString http www krsconnect no community api html method ba
  • 当 iPhone 设备方向朝上/朝下时,我可以判断它是横向还是纵向吗?

    我得到这个代码 如果设备处于左 右横向或上下颠倒状态 它会旋转并显示另一个视图控制器 但如果它的方向朝上或朝下 那么我如何判断它是横向模式还是纵向模式 因为我只想在它面朝上或朝下以及横向模式下旋转 void viewDidAppear BO
  • 使用捏合手势;如何放大用户手指实际“捏”的位置?

    我已经在我的应用程序中的 UIImageView 上实现了 UIPinchGestureRecognizer 但是无论我在图像的哪个位置捏合 它似乎都会放大到同一个位置 有谁知道我如何让它放大到用户实际 捏 的地方 请参阅下面的代码 视图控
  • 从 NSString 的第一行删除换行符

    我怎样才能删除第一个 nNSString 中的字符 编辑 只是为了澄清一下 我想做的是 如果字符串的第一行包含 n 字符 请将其删除 否则不执行任何操作 即 如果字符串是这样的 nhello this is the first line n
  • 如何使用 HTTP 标头发送非英语 unicode 字符串?

    我是 HTTP 相关问题的新手 我的问题是在 iOS 开发中 我想使用 HTTP 标头发送一个字符串 所以我使用 httpRequest setValue nonEnglishString forHTTPHeaderField custom
  • 取消交互式 UINavigationController 弹出手势不会调用 UINavigationControllerDelegate 方法

    如果拖动 a 的边缘UIViewController开始交互式流行过渡UINavigationController the UIViewController在电流下方有viewWillAppear 调用 然后是UINavigationCon
  • 标签中的文字大小

    如何限制标签中的字符数 您可以通过设置自动截断带有省略号的文本frame of the UILabel NSInteger newSize 10 label frame CGRectMake label frame origin x lab
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 处理核心数据中的重复条目

    我有一个允许用户保存收藏夹的应用程序 我正在使用 Core Data 将收藏夹存储为托管对象 我已经编写了一些代码来防止存储重复项的可能性 但我想知道是否有更好的方法来做到这一点 每个收藏夹对象都有一个唯一的 ID 字段 在下面的代码中 我
  • 使用导航控制器在 Storyboard 中呈现视图控制器 - Swift

    我目前在下面的新故事板中显示了一个 viewController var storyboard UIStoryboard UIStoryboard name AccountStoryboard bundle nil var vc Welco
  • iPhone PhoneGap 电子邮件编辑器 SECURITY_ERR:DOM 异常 18 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在使用phonegap 中的 i
  • Facebook 登录 Apple CNA

    问题 是否可以设置 Facebook 登录以在 CNA 中使用 是否为开发人员提供 CNA 文档 您可以使用任何开发人员工具调试 CNA 屏幕吗 Details 我创建了一个使用电子邮件提交表单或 Facebook 登录按钮的强制门户登录页
  • AVAudioMixerNode pan 或 AVAudioUnitSamplerstereoPan 属性无法更改 AVAudioEngine 声音输出的左/右平衡

    我有以下代码 它播放单个 MIDI 音符 但我希望能够调整平衡 平移 以便它仅从左扬声器或右扬声器或某些组合中播放 我认为更改 sampler stereoPan 或 engine mainMixerNode pan 也许可以解决问题 但它
  • 在应用程序内启用或禁用 Iphone 推送通知

    我有一个 iPhone 应用程序 可以接收推送通知 目前 我可以通过转到 iPhone 设置 通知来禁用我的应用程序的推送通知 但我想在我的应用程序中添加一个开关或按钮来启用或禁用推送通知 这是可以做到的 因为我在 foursquare i
  • 更新查询时 ios 中出现“数据库锁定”错误

    我正在使用下面的代码更新查询 using sqlite 但我越来越 database is locked error 我尝试搜索一些 SO 链接 建议关闭数据库 但我再次执行此操作时遇到相同的错误 我已经提到过代码中出现错误的地方 cons
  • 如何将 NSAppTransportSecurity 添加到 Cordova 项目

    我正在从事一个 ionic cordova 项目 该应用程序需要配置 iOS 9 版本的应用程序传输安全例外 有谁知道如何将以下配置添加到 cordova 项目配置文件中 配置 xml

随机推荐