1.在子线程中进行NSTimer的操作,再在主线程中修改UI界面。
(1)
(2)使用GCD,同样也是多线程
声明全局成员变量
dispatch_source_t _timers;
2.仍然在主线程中进行NSTimer操作,但是将NSimer实例加到mainRunLoop的特定mode中,避免被复杂的操作或者UI界面的刷新所干扰。
总结:
每一个线程都有一个实际已经存在的runloop。比如我们的主线程,在主函数的UIApplication中
系统就为我们将主线程的main runloop隐式的启动了。runloop顾名思义就是一个循环,他不停的运行,从程勋开始到程序退出。正是由于这个“循环”在不停的监听各种事件,程序才能有能力检测到用户的各种触摸交互、网络返回的数据才会诶检测到、定时器才会在预定的事件触发操作。
runloop只接受两种任务:输入源和定时源。文中说的是定时源。在默认的状态下,子线程的runloop中没有加入我们自己的源,那么我们在子线程中使用自己的定时器时,就需要自己加到runloop中,并启动该子线程的runloop,这样才能正确的运行定时器。