美文网首页
IOS常见问题分析

IOS常见问题分析

作者: 可问春风渡江陵 | 来源:发表于2017-07-20 12:20 被阅读0次

1、定时器问题

1) 定时器在子线程中不启动:

   定时器创建有两种方式:
   方式一:NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(run:) userInfo:@"test" repeats:YES];   
   方式二:NSTimer *timer = [NSTimer timerWithTimeInterval:3.0 target:self selector:@selector(run:) userInfo::@"test" repeats:YES];
         [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
       方式一和方式二相对比,方式一其实调用了scheduledTimer方法,会自动添加到当前的runloop里面去,而且runloop的运行模式kCFRunLoopDefaultMode;
       主线程和子线程的区别在于:主线程会自动创建runloop,而子线程不会自动创建,需要手动创建,所以在主线程中timer能够添加到当前runloop中;而对于子线程而言,根本不存在runloop,所以无法添加,以致于定时器无法启动;
       由于runloop的存在,所以主线程不会死亡;而对于子线程而言,不存在runloop,所以执行完任务后就会死亡,如果要子线程不死必须在子线程中创建一个runloop。

子线程中启动定时器的方法:

     NSRunLoop *loop = [[NSRunLoop currentRunLoop];
     NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(run:) userInfo:@"test" repeats:YES];   
    [loop run];

相关文章

网友评论

      本文标题:IOS常见问题分析

      本文链接:https://www.haomeiwen.com/subject/btudkxtx.html