什么是消息循环:
消息循环就是NSRunloop这个类 ,每个线程都有自己的消息循环。
主线程的消息循环默认是开启的(需要去检测事件),子线程默认关闭(通常不需要子线程检测事件)。
消息循环的目的:
保证程序不退出、负责处理输入事件(输入源和Timer源)、如果没有事件发生则会让程序处于休眠状态。
消息循环的两种运行模式:NSDefaultRunloopModel和 NSRunloopCommonModels
消息循环需要在一定的模式下才能相匹配,当在消息循环中添加了一个定时源时, 消息循环的模式必须和定时源的模式相匹配才能执行:
在主线程中:
NSTimer *timer= [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(TextDemo) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
/*当时用当前模式NSDefaultRunLoopMode时,当在UI上触发可见事件时,模式就发生了改变则定时源中的方法不运行了
将模式改为NSRunloopCommonModels时,定时源中的方法正常执行, 因为该模式下包含了两个底层的模式。
*/
在子线程中需要开启消息循环的方法:
//直接开启消息循环
[[NSRunLoop currentRunLoop] run];
//开启到什么时间
[[NSRunLoop currentRunLoop]runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];
时间: 2024-11-16 22:55:17