Ich versuche, einen Block Code 2 Sekunden nach dem Start 'ich habe'.iphone NStimer Start in 2 Sekunden
Ich denke, dass der NSTimer dies tun kann, aber es nicht herausfinden kann.
Ich versuche, einen Block Code 2 Sekunden nach dem Start 'ich habe'.iphone NStimer Start in 2 Sekunden
Ich denke, dass der NSTimer dies tun kann, aber es nicht herausfinden kann.
Im Folgenden wird das tun, was Sie brauchen:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 2
target:self
selector:@selector(handleTimer:)
userInfo:nil
repeats:NO];
Dann wird die Delegatfunktion:
-(void)handleTimer: (NSTimer *) timer
{
//code
}
Sie sollten in der Lage sein, die NSTimeInterval
auf 2,0 Sekunden einzustellen und es sollte nach dieser Zeit ausgelöst werden. Was siehst du? Mit welchem Code rufen Sie den Timer auf?
NSTimer verwendet werden kann, aber eine andere Option ist performSelector:withObject:afterDelay: Es ist im Grunde wie ein Methodenaufruf zu verwenden (Nachricht senden), die später passiert.
Dieses Beispiel wird eine doStuff senden: Nachricht nach einer Verzögerung:
[self performSelector:@selector(doStuff:) withObject:self afterDelay:2];
, die bewirkt, dass diese Methode auf 2,0 Sekunden später aufgerufen zu erhalten:
-(void)doStuff:(id)sender
{
/// do something
}
Sie können auch etwas handlichen Code verwenden:
NSObjekt + 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
Dann importieren nur NSObject + PerformBlock.h und rufen:
[myObject performBlock:^{
// Code you want to perform after 2secs
} afterDelay:2];
ich das nicht benutzt haben, aber ich mag das Konzept der Blöcke wie folgt aus . –