IOS在子线程中使用定时器,将定时器添加至RunLoop中(转)

来源:互联网 发布:c语言标准函数库是什么 编辑:程序博客网 时间:2024/05/16 13:26

转:http://my.oschina.net/u/936286/blog/159490

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
02{
03    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
04     
05    //用NSObject的方法创建一个多线程
06    [self performSelectorInBackground:@selector(multiThread) withObject:nil];
07     
08    self.window.backgroundColor = [UIColor whiteColor];
09    [self.window makeKeyAndVisible];
10    return YES;
11}
12- (void)multiThread
13{
14    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
15    if (![NSThread isMainThread]) {
16         
17        // 第1种方式
18        //此种方式创建的timer已经添加至runloop中
19//        [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
20        //保持线程为活动状态,才能保证定时器执行
21//        [[NSRunLoop currentRunLoop] run];//已经将nstimer添加到NSRunloop中了
22         
23        //第2种方式
24        //此种方式创建的timer没有添加至runloop中
25       NSTimer *timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
26        //将定时器添加到runloop中
27        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
28        [[NSRunLoop currentRunLoop] run];
29        NSLog(@"多线程结束");
30    }
31     [pool release];
32}
33 
34- (void)timerAction
35{
36    //定时器也是在子线程中执行的
37    if (![NSThread isMainThread]) {
38        NSLog(@"定时器");
39    }
40}
0 0
原创粉丝点击