2018-02-28 runloop 笔记

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 *)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的死循环,后面的代码不会执行。

你可能感兴趣的:(2018-02-28 runloop 笔记)