【发布时间】:2014-07-18 07:21:32
【问题描述】:
我在视图控制器中有一个NSTimer 强属性。我通过调用此方法创建并启动此计时器:
- (void)startTimer
{
if (self.timer != nil) {
[self.timer invalidate];
}
self.timer = [NSTimer scheduledTimerWithTimeInterval:10
target:self
selector:@selector(timerDidFinish:)
userInfo:nil
repeats:NO];
}
然后,当timerDidFinish:被调用时,我调用这个方法来停止定时器:
- (void)stopTimer
{
if (self.timer != nil) {
[self.timer invalidate];
self.timer = nil;
}
}
然后,我执行一些操作。在这些操作结束时,我再次致电startTimer。我需要这样做以保持定期执行我需要的操作,并在操作之间始终保持相同的时间(10 秒)。
在Instruments 中,使用Leaks 模板并导航到具有此计时器的视图控制器,我发现在iOS 7 设备中运行Live Bytesvalue 和Allocations 图随着时间的推移或多或少保持不变:
但是在 iOS 6 设备上运行同样的场景,Live Bytes 和 Allocations 图稳步增加:
我该如何处理?
谢谢
【问题讨论】:
-
为什么不使用重复计时器?并使用仪器查看分配的对象是什么。
-
令我震惊的是,您需要在分析中深入了解另一个细节。 Instruments 可以告诉你什么正在分配和没有被释放(例如,在分配图表中拖动选项以选择时间范围,然后查看“分配摘要”并深入了解)。看看那个,让我们知道你发现了什么。
-
我不认为计时器本身是问题的根源。它可能像一些内部缓存一样无害。很难说,直到你确定什么被分配而不被释放。尝试模拟内存警告,看看是否发现内存正在恢复。另外,我们在谈论多少内存?两种情况下的总有效字节数是多少?
标签: ios xcode memory-management nstimer instruments