文章参考地址:http://doandroid.info/object-c中的定时器功能/
在Object-C中,有三种方法可以实现定时器的功能。
1 使用NSObject对象的performSelector:withObject:afterDelay:的方法。
2 使用GCD的Block Objects方法。
3 使用GCD的C Functions方法。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
-
(
void
) printString
:
(
NSString
*
)paramString
{ NSLog ( @ "%@", paramString ); } - ( BOOL ) application : (UIApplication * )application didFinishLaunchingWithOptions : ( NSDictionary * )launchOptions { [self performSelector : @selector (printString : ) withObject : @ "Grand Central Dispatch" afterDelay : 3.0 ]; self.window = [ [UIWindow alloc ] initWithFrame : [ [UIScreen mainScreen ] bounds ] ]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor ]; [self.window makeKeyAndVisible ]; return YES; } |
使用GCD的dispatch_after方法和dispatch_after_f方法。
第一个方法三个参数:Delay in nanoseconds,Dispatch queue,Block object
第二个方法四个参数:Delay in nanoseconds,Dispatch queue,Context,C function
第一种方法的实现:
1
2 3 4 5 6 7 |
double delayInSeconds
=
2.0;
dispatch_time_t delayInNanoSeconds = dispatch_time (DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC ); dispatch_queue_t concurrentQueue = dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ); dispatch_after (delayInNanoSeconds, concurrentQueue, ^ ( void ) { /* Perform your operations here */ } ); |
第二种实现:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void processSomething
(
void
*paramContext
)
{
/* Do your processing here */ NSLog ( @ "Processing..." ); } - ( BOOL ) application : (UIApplication * )application didFinishLaunchingWithOptions : ( NSDictionary * )launchOptions { double delayInSeconds = 2.0; dispatch_time_t delayInNanoSeconds = dispatch_time (DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC ); dispatch_queue_t concurrentQueue = dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ); dispatch_after_f (delayInNanoSeconds, concurrentQueue, NULL, processSomething ); self.window = [ [UIWindow alloc ] initWithFrame : [ [UIScreen mainScreen ] bounds ] ]; self.window.backgroundColor = [UIColor whiteColor ]; [self.window makeKeyAndVisible ]; return YES; } |