【问题标题】:ios cmmotionanager memory usageios cmmotionanager 内存使用情况
【发布时间】:2013-06-21 02:07:22
【问题描述】:

我按照本教程:http://blogs.captechconsulting.com/blog/john-morrison/ios-getting-started-accelerometer-data 让我的 iPhone 应用程序监听加速度计。在我的 AppDelegate 中添加了 CMMotionManager,并添加了一个属性来读取视图控制器中应用程序的 CMMotionManager。现在我的应用收到内存使用警告。

我将应用程序连接到内存分析器工具,并且可以看到当我不与应用程序交互并且它静止地坐在桌子上时,我的内存使用量呈线性增长。罪魁祸首似乎在这段代码中:

[self.motionManager setDeviceMotionUpdateInterval:0.1];
aQueue=[[NSOperationQueue alloc]init];
[self.motionManager     startDeviceMotionUpdatesToQueue:aQueue
 withHandler:^(CMDeviceMotion *motion, NSError *error)
 {
     if (motion.userAcceleration.x > movementThreshold || motion.userAcceleration.y > movementThreshold || motion.userAcceleration.z > movementThreshold) {
         movementCount = 5;
     };

     motion = nil;
 }];

第一个示例内联定义了队列,作为最后的手段,我将队列移动为我的视图控制器的成员变量 - 两者似乎都没有太大效果。当我不打开更新间隔时,我看不到内存使用量增加。当我打开更新间隔时,内存会增长。

movementCount 被声明为 viewController 的私有 int,并用于跟踪最近的手机移动。随着时间的推移,另一个线程缓慢地将计数器重置为零......但是启用/禁用该线程似乎不会影响内存使用,所以我已经忽略了该代码......

我在网络上没有看到任何关于 CMMotionManager 可能导致内存使用过多的警告,但是我让应用程序运行的每一分钟,都会消耗另外 5 兆的内存...有什么技巧可以帮助解决我的问题的根源是什么?...

【问题讨论】:

  • 本教程在应用程序委托中声明了 CMMotionManager,但出于微笑,我将 alloc 移到了大多数教程都有的视图控制器中。 - 当我将分配移到视图控制器时,内存“泄漏”消失了......现在内存使用情况看起来更加稳定......但是我不想使用一个常见的 CMMotionManager 吗?那不是更好吗?... grumble

标签: ios memory-leaks uiaccelerometer cmmotionmanager


【解决方案1】:

看起来我查看了错误的列(屏幕截图) - 应该使用“Live Bytes”,但正在查看“Overall Bytes”......我生命中有六个小时我没有回来...... .

【讨论】:

  • 我想我意识到了问题所在 - 我看错了仪表板上的列。第一列显示“总字节数”——我认为这是应用程序的总消耗量。显然,该列是应用程序在应用程序生命周期内使用的字节数,而不是当前使用的字节数。我应该查看的列是第二列 - “Live Bytes” - 这是显示实际使用了多少字节的列。总字节数永远不会下降,但实时字节数会上升和下降。我不知道为什么我直到现在才看到...
猜你喜欢
  • 2011-12-20
  • 1970-01-01
  • 2014-04-25
  • 2018-03-13
  • 2016-02-05
  • 2015-02-03
  • 2012-05-30
  • 2021-02-26
  • 2010-10-24
相关资源
最近更新 更多