'Stop Method Execution after 5 Minute

How can i stop the execution of the method after a certain time? I am calling method as below:

[NSTimer scheduledTimerWithTimeInterval:5.0f
                                 target:self
                               selector:@selector(doSomeTask) userInfo:nil repeats:YES];

Here i have given interval of 5 Seconds. So this method will get called after every 5 seconds, So once the reaches to specified time i want to stop this method execution.



Solution 1:[1]

Try to create NSTimer that will be called after some time only once :

NSTimer *previous [NSTimer scheduledTimerWithTimeInterval:5.0f target:self selector:@selector(doSomeTask) userInfo:nil repeats:YES];

[NSTimer scheduledTimerWithTimeInterval:300 target:self selector:@selector(stopPrevious) userInfo:nil repeats:NO];

-(void)stopPrevious{
    [previous invalidate];
}

Solution 2:[2]

Take a counter variable, and increase in every call by 5 (as time interval is 5 sec ) like

counter = counter+5;

    -(void) doSomeTask {

     if (counter<=60) {  // 5 min = 300   300/5 = 60

       // Write method body here

         counter = counter+5 
      }

       else {
          [timer invalidate];
       }
    }

Solution 3:[3]

If you want to stop execution of the method after 5 min. Then you can add code like this

 @interface YourClass () {
    int count;
 }  
 @end

 -(void)viewDidLoad {
    count = 5;
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5.0f target:self selector:@selector(doSomeTask) userInfo:nil repeats:YES];
  }

  -(void) doSomeTask
  { 
    count = count + 5;
    if (count==300)
    {
      [timer invalidate];
      timer=nil;
    }
  }

Solution 4:[4]

#define TIMER_LIFE_IN_SECONDS 300.0
@interface YourClass () {
    NSTimeInterval _startTime;
}

self.timer = [NSTimer scheduledTimerWithTimeInterval:5.0f target:self selector:@selector(doSomeTask) userInfo:nil repeats:YES];
_startTime = [NSDate timeIntervalSinceReferenceDate];


- (void) doSomeTask
{
    // do thing

    NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];
    if (now - _startTime > TIMER_LIFE_IN_SECONDS) {
        [self.timer invalidate];
        self.timer = nil;
    }
}

Solution 5:[5]

you can try like this

NSTimer *reachTimer;
NSInteger secondsLeft;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    secondsLeft = 0;

reachTimer = [NSTimer scheduledTimerWithTimeInterval:5.0f target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];

}

-(void)updateCounter:(NSTimer *)theTimer{
 secondsLeft = secondsLeft+5;

 if(secondsLeft>=300) // 60sec * 5min= 300 
 {
    [reachTimer invalidate];
 }

}

Solution 6:[6]

Try this;

int count;
NSTimer *timer;

-(void)startTimertillLimit:(int)limit {
     count = 0;
     timer = [NSTimer scheduledTimerWithTimeInterval:5
                                              target:self
                                            selector:@selector(doSomething:)
                                            userInfo:[NSString stringWithFormat:@"%d",limit]
                                             repeats:YES];
}

-(void)doSomething:(NSTimer*)sender
{
     int limit = (int)[sender.userInfo intValue];
     count = count + 5;
     if (count > limit)
     {
         [timer invalidate];
         timer=nil;
         count = 0;
     }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Jigar
Solution 3
Solution 4 Jigar
Solution 5
Solution 6