我遇到的情况是我无法正确处理NSTimer
。
在我的应用程序中,我可以选择用户聊天(由于预算项目较少,我没有使用XMPP,但聊天只能通过API调用)。我以15秒的时间间隔安排了一个计时器。如果有任何新聊天可用,我会得到它并更新聊天视图。
以下是工作方案:
UITabbar
的应用,用户将进入“聊天”标签。viewDidDisappear:
方法中,我正在使(正在运行的)计时器无效。在我的单元测试中,如果我继续推动&弹出/从聊天屏幕弹出,将有多个该计时器的实例将被安排。我怀疑,这是错误的。
我不确定我在做什么是正确的,但我需要你的帮助才能理解正确和正确的方法来完成我的功能。我想这里不需要上面解释的代码。
答案 0 :(得分:1)
首先,你为什么不探索推送通知的选项?每15秒轮询服务器是一个糟糕的设计: - (
其次,当谈到NSTimer
时,从同一个线程开始和停止它们很重要。我建议你在下面的块中封装你的计时器启动/停止代码,总是确保你用你的计时器处理主线程。
dispatch_async(dispatch_get_main_queue(), ^{
});
答案 1 :(得分:0)
这是通常与NSTimer
一起使用的方式。希望能帮助到你。
@implementation MainViewController{
NSTimer *myTimer
}
- (void)startTimer{
//Prevents multiple timers at the same time.
[myTimer invalidate];
myTimer = [NSTimer scheduledTimerWithTimeInterval:5.0f target:self selector:@selector(update) userInfo:nil repeats:YES];
}
- (void)update
{
//Stops the timer if the view in not on the screen
if (!(self.isViewLoaded && self.view.window)) {
[myTimer invalidate];
}
}
@end