Próbuję uruchomić blok kodu 2 sekundy po "uruchomieniu" go.iPhone NStimer start w 2 sekundy
Myślę, że NSTimer może to zrobić, ale nie może tego rozgryźć.
Próbuję uruchomić blok kodu 2 sekundy po "uruchomieniu" go.iPhone NStimer start w 2 sekundy
Myślę, że NSTimer może to zrobić, ale nie może tego rozgryźć.
Poniższa zrobi co trzeba:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 2
target:self
selector:@selector(handleTimer:)
userInfo:nil
repeats:NO];
Następnie funkcja delegata:
-(void)handleTimer: (NSTimer *) timer
{
//code
}
Powinieneś być w stanie ustawić NSTimeInterval
na 2,0 sekundy i powinien wystrzelić po tym czasie. Co widzisz? Jaki jest kod, którego używasz do wywoływania timera?
NSTimer mogą być używane, ale inną opcją jest użycie performSelector:withObject:afterDelay: Jest to w zasadzie jak wywołanie metody (wiadomość wysłana), co dzieje się później.
Przykład ten wyśle DoStuff: wiadomości z opóźnieniem:
[self performSelector:@selector(doStuff:) withObject:self afterDelay:2];
co powoduje ten sposób, aby powoływać 2,0 sekundy później:
-(void)doStuff:(id)sender
{
/// do something
}
Można również użyć jakiś poręczny kod:
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
Następnie wystarczy zaimportować NSObject + PerformBlock.h i zadzwonić:
[myObject performBlock:^{
// Code you want to perform after 2secs
} afterDelay:2];
I nie był używany, ale bardzo podoba mi się koncepcji wykorzystania bloków tak . –