2010-05-06 2 views

답변

11

다음은 당신이 필요로 할 것입니다 :

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

그런 다음 위임 기능 :

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

NSTimeInterval을 2.0 초로 설정할 수 있으며 해당 시간이 지나면 시작됩니다. 너 뭐야? 타이머를 호출하는 데 사용하는 코드는 무엇입니까?

19
NSTimer 사용할 수 있지만 다른 옵션 그것은 (메서드 호출처럼 기본적이다 performSelector:withObject:afterDelay:을 사용하는 것입니다

메시지 전송).

doStuff를 보낼 것이 예 : 메시지를 지연 후 :

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

당신은 또한 몇 가지 편리한 코드를 사용할 수 있습니다 :이 방법은 2.0 초 후에 호출 얻을됩니다

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

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 

은 그럼 그냥 NSObject의 + PerformBlock.h를 가져오고 전화 :이 사용하지 않은

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

을,하지만 난 정말이 같은 블록을 사용하는 개념과 같은 . –