【发布时间】:2011-03-29 13:07:29
【问题描述】:
有谁知道什么时候是停止在 UIViewController 内保持引用的 NSTimer 的最佳时间,以避免在计时器和控制器之间保持循环?
这是更详细的问题:我在 UIViewController 中有一个 NSTimer。
在视图控制器的 ViewDidLoad 期间,我启动了计时器:
statusTimer = [NSTimer scheduledTimerWithTimeInterval: 1 target: self selector: @selector(updateStatus) userInfo: nil repeats: YES];
以上内容导致计时器持有对视图控制器的引用。
现在我想释放我的控制器(例如父控制器释放它)
问题是:我在哪里可以调用 [statusTimer invalidate] 来强制计时器释放对控制器的引用?
我尝试将它放在 ViewDidUnload 中,但在视图收到内存警告之前它不会被触发,所以这不是一个好地方。我尝试了dealloc,但只要计时器还活着,就永远不会调用dealloc(鸡和鸡蛋问题)。
有什么好的建议吗?
【问题讨论】:
-
定时器中不需要保留视图控制器。 VC 应该拥有计时器,就像它拥有的任何其他对象一样,并在适当的时候销毁它。
-
@logancautrell,你的观点很好,但
NSTimer保留了你传递给它的目标,并且无法更改。 (不过,一些答案提出了尝试解决这个问题的方法。) -
哎呀,我看到了你遇到的问题。另一种方法是添加一个您的 VC 和计时器都拥有的辅助对象。
标签: iphone objective-c memory-management memory-leaks nstimer