iphone NStimer start in 2 seconds

你说的曾经没有我的故事 提交于 2019-11-30 14:11:14

问题


I am trying to have a block of code run 2 seconds after I 'start' it.

I think the NSTimer can do this but can't figure it out.


回答1:


The following will do what you need:

 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 2 
                                   target:self 
                                   selector:@selector(handleTimer:) 
                                   userInfo:nil
                                   repeats:NO];

Then the delegate function:

-(void)handleTimer: (NSTimer *) timer 
{       
   //code
}



回答2:


NSTimer can be used, but another option is to use performSelector:withObject:afterDelay: It's basically like a method call (message send) that happens later.

This example will send a doStuff: message after a delay:

[self performSelector:@selector(doStuff:) withObject:self afterDelay:2];

which causes this method to get invoked 2.0 seconds later:

-(void)doStuff:(id)sender 
{
    /// do something
}



回答3:


You can also use some handy code :

NSObject+PerformBlock.h

@interface NSObject (PerformBlock)

- (void)performBlock:(void(^)(void))block waitUntilDone:(BOOL)wait;
- (void)performBlock:(void(^)(void))block afterDelay:(NSTimeInterval)delay;
- (void)performBlock:(void(^)(void))block repeatCount:(NSUInteger)repeatCount timeInteval:(NSTimeInterval)timeInterval;

@end

NSObject+PerformBlock.m

@interface NSObject (PerformBlockHidden)

- (void)performBlock:(void(^)(void))block;

@end

@implementation NSObject (PerformBlock)

- (void)performBlock:(void(^)(void))block {
    block();
}

- (void)performBlock:(void(^)(void))block waitUntilDone:(BOOL)wait {
    [self performSelector:@selector(performBlock:) onThread:nil withObject:[[block copy] autorelease] waitUntilDone:wait];
}

- (void)performBlock:(void(^)(void))block afterDelay:(NSTimeInterval)delay {
    [self performSelector:@selector(performBlock:) withObject:[[block copy] autorelease] afterDelay:delay];
}

- (void)performBlock:(void(^)(void))block repeatCount:(NSUInteger)repeatCount timeInteval:(NSTimeInterval)timeInterval {
    for (NSInteger repetition = 0; repetition < repeatCount; repetition++)
        [self performBlock:block afterDelay:(repetition*timeInterval)];
}

@end

Then just import NSObject+PerformBlock.h and call :

[myObject performBlock:^{
    // Code you want to perform after 2secs
} afterDelay:2];



回答4:


You should be able to set the NSTimeInterval to 2.0 seconds and it should fire after that amount of time. What are you seeing? What is the code you are using to invoke the timer?



来源:https://stackoverflow.com/questions/2784809/iphone-nstimer-start-in-2-seconds

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!