Scheduled NSTimer后台运行

来源:互联网 发布:台军反攻知乎 编辑:程序博客网 时间:2024/06/02 01:48
- (void)viewDidLoad{    // Avoid a retain cycle    __weak ViewController * weakSelf = self;    // Declare the start of a background task    // If you do not do this then the mainRunLoop will stop    // fireing when the application enters the background    self.backgroundTaskIdentifier =    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];    // Make sure you end the background task when you no longer need background execution:    // [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskIdentifier];    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{        // Since we are not on the main run loop this will NOT work:        [NSTimer scheduledTimerWithTimeInterval:0.5                                         target:self                                       selector:@selector(timerDidFire:)                                       userInfo:nil                                        repeats:YES];        // This is bacause the |scheduledTimerWithTimeInterval| uses        // [NSRunLoop currentRunLoop] which will return a new background run loop        // which will not be currently running.        // Instead do this:        NSTimer * timer =        [NSTimer timerWithTimeInterval:0.5                                target:weakSelf                              selector:@selector(timerDidFire:)                              userInfo:nil                               repeats:YES];        [[NSRunLoop mainRunLoop] addTimer:timer                                  forMode:NSDefaultRunLoopMode];        // or use |NSRunLoopCommonModes| if you want the timer to fire while scrolling    });}- (void) timerDidFire:(NSTimer *)timer{    // This method might be called when the application is in the background.    // Ensure you do not do anything that will trigger the GPU (e.g. animations)    // See: http://developer.apple.com/library/ios/DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW47    NSLog(@"Timer did fire");}
0 0