iOS设置NSTimer仅在活动/非活动页面上调用方法

时间:2014-06-24 13:12:32

标签: ios objective-c nstimer

我的一个ViewController我想在一些时间标准上调用方法updateVisitotsLists,并且无法确定哪种方式最适合实现它。

1)每次加载/出现视图时,我都想调用此方法。

对于viewDidAppear方法中的这个,我可以在调用[super viewDidAppear];之前调用它,这样就行了,我相信。

2)如果用户仅在此视图上,那么我想在每5秒后调用此方法。

为此,我需要设置NSTimer。我想在viewDidDisappear时停止这个计时器 - 因为不希望它运行不必要。我应该如here所示使用UnScheduled Timer并在出现和停止时启动和停止消失的方法?在viewDidAppear中,我最初调用此方法,然后还设置

NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 5.0
                  target: self
                  selector:@selector(updateVisitotsLists:)
                  userInfo: nil repeats:NO];

实现我想要的最佳方式和方法是什么?任何帮助都非常感谢。

感谢。

更新: -

@Lord Zolt,根据你的评论,我做了以下几点: -

 //In .h
 @property (strong, nonatomic) NSTimer *timer; 

 // .m 
 @synthesize timer;

 - (void)viewDidLoad
 {
    ........

   [super viewDidLoad];

   // CREATE TIMER
   timer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(onTimerCall:) userInfo:nil repeats:YES];
 }

 -(void) viewWillDisappear:(BOOL)animated {
    [timer invalidate];
    timer = nil;

    [super viewWillDisappear:animated];
 }

 -(void) onTimerCall: (NSTimer *) _timer {
    // UPDATE VISITOR'S LIST
    [self updateVisitotsLists];
 }

这是正确的吗?

1 个答案:

答案 0 :(得分:2)

我建议使用计时器。

创建NSTimer属性,但我建议在viewWillDisappear上调用invalidate

如果您没有调用invalidate,当视图控制器被解除或弹出时,它将无法取消分配,因为NSTimer将使其保持活动状态。

您发布的代码很好,但有一些修改:

  • 您不再需要@synthesize属性(除非您同时覆盖setter和getter)。
  • 不要将计时器设置为零。

编辑:如果您希望计时器与屏幕相关(也就是说它应该仅在屏幕可见时执行),您应该在viewDid(Will)Appear中初始化并在viewDid(Will)Disappear中停止。< / p>