iphone NStimer start in 2 seconds

后端 未结 4 1651
终归单人心
终归单人心 2021-01-01 01:19

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.

4条回答
  •  南方客
    南方客 (楼主)
    2021-01-01 01:57

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

提交回复
热议问题