J'essaye d'avoir un bloc de code exécuté 2 secondes après que je l'ai 'commencé'.iphone NStimer démarrer en 2 secondes
Je pense que le NSTimer peut le faire mais ne peut pas le comprendre.
J'essaye d'avoir un bloc de code exécuté 2 secondes après que je l'ai 'commencé'.iphone NStimer démarrer en 2 secondes
Je pense que le NSTimer peut le faire mais ne peut pas le comprendre.
Ce qui suit fera ce dont vous avez besoin:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 2
target:self
selector:@selector(handleTimer:)
userInfo:nil
repeats:NO];
ensuite la fonction de délégué:
-(void)handleTimer: (NSTimer *) timer
{
//code
}
Vous devriez pouvoir régler le NSTimeInterval
à 2.0 secondes et il devrait se déclencher après ce laps de temps. Que vois-tu? Quel est le code que vous utilisez pour appeler la minuterie?
NSTimer peut être utilisé, mais une autre option est d'utiliser performSelector:withObject:afterDelay: Il est fondamentalement comme un appel de méthode (message envoyer) qui se passe plus tard.
Cet exemple envoyer un doStuff: message après un délai:
[self performSelector:@selector(doStuff:) withObject:self afterDelay:2];
qui provoque cette méthode pour obtenir invoqua 2.0 secondes plus tard:
-(void)doStuff:(id)sender
{
/// do something
}
Vous pouvez également utiliser un code pratique:
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
Ensuite, il suffit importer NSObject + PerformBlock.h et appelez:
[myObject performBlock:^{
// Code you want to perform after 2secs
} afterDelay:2];
Je ne l'ai pas utilisé, mais je vraiment le concept d'utilisation des blocs comme celui-ci . –