【问题标题】:NSTimer not invalidated even if cancelled in iPad arc project即使在 iPad arc 项目中取消,NSTimer 也不会失效
【发布时间】:2013-11-21 07:41:59
【问题描述】:

我正在激活计时器以调用 web 服务 api 以与详细信息同步。在获取用户的详细信息后,我正在激活此计时器。我调用 activateSyncTimer,如果之前激活的计时器我将在其中取消它本身。我也会在视图中消失clearSyncTimer 。但是在控制台中我看到计时器没有失效。我正在使用 ipad 并且该项目已完成

- (void)activateSyncTimer {
[self clearSyncTimer];

if (self.canTakeTest && [[NSUserDefaults standardUserDefaults] boolForKey:kIsLoggedIn]) {
    self.syncTimer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(syncTestWithServer) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:self.syncTimer forMode:NSDefaultRunLoopMode];
}
}

- (void)clearSyncTimer {
if (self.syncTimer != nil) {
    [self.syncTimer invalidate];
    self.syncTimer = nil;
}

 }

【问题讨论】:

  • 你不需要将你的定时定时器添加到运行循环中

标签: ios ipad uiviewcontroller nstimer


【解决方案1】:

尝试删除此行 [[NSRunLoop mainRunLoop] addTimer:self.syncTimer forMode:NSDefaultRunLoopMode];

如果调用scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:方法,就不必手动将定时器添加到runloop中

【讨论】:

  • 即使我没有添加到运行循环中,这是触发
  • web服务的数据是如何返回的?它是在一个块中,还是在一个委托方法中?尝试调用 dispatch_async(dispatch_get_main_queue(), ^([weakThis activateSyncTimer];))
  • 我也尝试从视图中调用 nstimer 确实加载以检查它是否停止。但没有机会。
  • syncTimer是什么属性?您可以尝试使用实例变量 _syncTimer 进行所有操作。我看不出为什么这不起作用
  • @property (nonatomic ,retain) NSTimer *syncTimer;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 2018-10-02
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
相关资源
最近更新 更多