2018-02-28 runloop 笔记
2018-03-12 本文已影响5人
KKKKaras
runloop
作用
- 保持程序运行
- 处理app的各种事件(比如触摸,定时器等等)
- 节省CPU资源,提高性能。
模型
・CFRunLoopRef = RunLoop
・CFRunLoopModeRef 是mode的属性
・CFRunLoopSourceRef
・CFRunLoopTimerRef
・CFRunLoopObserverRef
・是CFRunLoopRef的内容
- NSRunLoop 把CFRunLoopRef进行了简单了封装
- CFRunLoopRef 基于c语言
Foundation
[NSRunLoop currentRunLoop]; // 获得当前线程的RunLoop对象
[NSRunLoop mainRunLoop]; // 获得主线程的RunLoop对象
Core Foundation
CFRunLoopGetCurrent(); // 获得当前线程的RunLoop对象
CFRunLoopGetMain(); // 获得主线程的RunLoop对象
应用实例
1、当设置点击事件 延迟2秒执行时
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self.imageView performSelector:@selector(setImage:) withObject:[UIImage imageNamed:@"1"] afterDelay:2.0 inModes:@[NSDefaultRunLoopMode]];
}
在延迟执行的时候 进行比如textview、scrollview的滑动 会导致图片显示不出来。
[self.imageView performSelector:@selector(setImage:) withObject:[UIImage imageNamed:@"1"] afterDelay:2.0 inModes:@[NSRunLoopCommonModes]];
延伸
- a.要让RunLoop跑起来,必须要给其添加一个有内容的mode。而且必须要让他Run。
- b.RunLoop跑起来后相当于是一个while的死循环,后面的代码不会执行。