场景一:NSTimer
RunLoop有多种model,每种model下面有多个source,RunLoop的运行是在不同model中切换的,所以如果把一个NSTimer添加到kCFRunLoopDefaultMode中的时候,如果滑动表视图,NSRunLoop会切换到UITrackingRunLoopMode模式下,导致NSTimer无法运行。
解决方法:将NSTimer添加到NSRunLoopCommonModes模式下,添加到NSRunLoopCommonModes模式下的source,RunLoop会检测里面的source有没有被执行,如果没有被执行,RunLoop就会把这个source添加到当前的Model中去,保证了NSTimer的运行。
场景二:线程保活
如果开辟了一个子线程,子线程中的任务执行完毕就会退出,销毁,如果想长时间的让子线程执行代码,那么把子线程添加到RunLoop中去。