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

iOS将NSTimer设置为仅在活动/非活动页面上调用方法,ios,objective-c,nstimer,Ios,Objective C,Nstimer,我想调用某个时间标准上的方法updateVisitotsLists,但我无法决定哪种方法最适合实现它 1) 每次加载/显示视图时,我都要调用此方法 对于这个in-ViewDidAspect方法,我可以在调用[super-ViewDidAspect]之前调用它;,我相信这是可行的 2) 如果用户仅在此视图上,则我希望每5秒调用一次此方法 为此,我需要设置一个NSTimer。我想在ViewDid消失时停止此计时器-因为我不希望它不必要地运行。我是否应该使用如图所示的非计划计时器,并在“显示和消失”方

我想调用某个时间标准上的方法
updateVisitotsLists
,但我无法决定哪种方法最适合实现它

1) 每次加载/显示视图时,我都要调用此方法

对于这个in-ViewDidAspect方法,我可以在调用[super-ViewDidAspect]之前调用它;,我相信这是可行的

2) 如果用户仅在此视图上,则我希望每5秒调用一次此方法

为此,我需要设置一个NSTimer。我想在ViewDid消失时停止此计时器-因为我不希望它不必要地运行。我是否应该使用如图所示的非计划计时器,并在“显示和消失”方法中启动和停止?在ViewDidDisplay中,最初我调用此方法,然后还设置

NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 5.0
                  target: self
                  selector:@selector(updateVisitotsLists:)
                  userInfo: nil repeats:NO];
实现我所追求的目标的最佳方式和方法是什么?非常感谢您的帮助

谢谢

更新:-

@佐尔特勋爵,根据你的评论,我做了以下工作:-

 //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];
 }

这合适吗?

我建议使用计时器

创建一个
NSTimer
属性,但我建议在ViewWillEnglishe上对它们调用
invalidate

如果不调用invalidate,当视图控制器被解除或弹出时,它将不会被解除分配,因为NSTimer将使其保持活动状态

您发布的代码经过一些修改后就可以了:

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

编辑:如果你想让计时器与屏幕相关(也就是说,它应该只在屏幕可见时才执行),你应该在
viewDid(Will)present
中初始化,并在
viewDid(Will)invision
中停止它。我建议使用计时器。创建一个
NSTimer
属性,但我建议在ViewWillEnglishe上对它们调用
invalidate
。如果您不调用invalidate,当视图控制器被解除或弹出时,它将不会被解除分配,因为NSTimer将使其保持活动状态。@LordZsolt,请检查上面问题中添加的代码。@LordZsolt,您能否将您的答案作为答案,以便我可以标记为已解决。@Tvd,您应该将scheduledTimerWithTimeInterval方法调用移到viewWill(Did)出现方法。因为并非每次屏幕出现时都调用viewDidLoad。@ArtemStepanenko,非常感谢。