【问题标题】:NSTimer nonstop memory increasing - iOS bug?NSTimer 不间断内存增加 - iOS 错误?
【发布时间】:2010-12-13 19:16:11
【问题描述】:

我正在使用仪器解决 iPad 应用程序的内存问题 - 查看分配的总字节数。我的 NSTimer 会导致字节不断增加,而将其注释掉会导致内存使用量保持不变。

来自我的视图控制器的 viewDidLoad:

tickTime = 1.0 / 30.0;
tickTimer = [NSTimer scheduledTimerWithTimeInterval:tickTime target: self selector:@selector(update2) userInfo: nil repeats: YES];

还有方法update2:

- (void) update2 {

}

如您所见,该方法没有任何操作 - 但应用程序的内存使用量不断增长。如果我注释掉设置计时器的行,内存使用量保持不变。

这是 iOS SDK 中的错误吗?有人知道解决方法吗?

【问题讨论】:

  • 您能否更具体地说明此计时器的用途?你需要它经常更新吗?另外,tickTime 是什么类型的变量?

标签: iphone objective-c ipad ios sdk


【解决方案1】:

这是一个 pebkac 问题 - 我正在研究 Instruments 中的“总字节数”,它是衡量应用程序曾经使用过的所有内存的指标,而不是衡量当前内存使用情况的指标。

我仍然很好奇如何测量应用程序当前的总内存使用量——因为“Live Bytes”大约是 1.5mb——即使加载了至少 20mb 的 .pngs。

【讨论】:

    【解决方案2】:

    如果您通过 UI 执行某些操作,内存使用会下降吗? IE。如果你点击一个按钮或什么的?

    哪些物品不应该挂在上面? Instruments 提供的信息远不止您的堆在增长。

    通常,应避免使用以 1/30 秒间隔计时的计时器。

    • 如果它在主线程上,它会使您的应用程序的响应非常不稳定(充其量)或完全没有响应

    • 如果您尝试制作动画,请使用 Core Animation(或各种 Open GL 模式之一)

    • 它会消耗电池寿命。

    【讨论】:

    • 我说的是“要避免”,而不是“完全崩溃”。如果可能的话,应避免任何类型的轮询或快速启动机制。如果您让系统尽可能多地处理紧张的周期性任务,您的应用会表现得更好并消耗更少的电量。
    【解决方案3】:

    我相信计时器可能会“触发”以快速让 iPhone 处理。我遇到了同样的问题,不得不减慢计时器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-20
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多