2010-05-06 21 views

Trả lời

11

Sau đây sẽ làm những gì bạn cần:

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

Sau đó, chức năng đại biểu:

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

Bạn có thể đặt NSTimeInterval thành 2.0 giây và nó sẽ kích hoạt sau khoảng thời gian đó. Bạn đang nhìn cái gì vậy? Mã bạn đang sử dụng để gọi bộ hẹn giờ là gì?

19

NSTimer có thể được sử dụng, nhưng tùy chọn khác là sử dụng performSelector:withObject:afterDelay: Đó là về cơ bản giống như một lời gọi phương thức (gửi tin nhắn) xảy ra sau.

Ví dụ này sẽ gửi một doStuff: Thông báo sau khi một sự chậm trễ:

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

gây phương pháp này để nhận được viện dẫn 2.0 giây sau:

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

Bạn cũng có thể sử dụng một số mã có ích:

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 

Sau đó chỉ cần nhập NSObject + PerformBlock.h và gọi:

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

Tôi đã không được sử dụng này, nhưng tôi thực sự thích các khái niệm của việc sử dụng khối như thế này . –

Các vấn đề liên quan