Runloop 小记

2017-11-12  本文已影响0人  scorpio_yang

一直在断断续续的看Runloop的一些使用,在项目中有偶尔有使用,这次再来复习,就简单的记录一些笔记,纯属个人笔记比较凌乱,因为还在继续学习,等补充完后再来从新编辑,内容主要是对网上一些内容的总结和记录

RunLoop 实际上就是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来执行事件循环(Event Loop)的逻辑, Event Loop可以看做一个一直在等待消息处理事件的循环,直到循环结束

Mach Port: CFMachPort、CFMessagePort

Autorelease与RunLoop

Autorelease: UIKit通过RunloopObserver在Runloop的两次Sleep之间对AutoreleasePool进行Pop和Push,将在这次loop产生的Autorelease对象释放

RunLoopMode

Runloop在同一时间只能且必须在一种特定的Mode下运行,这个Mode被称作 CurrentMode。更换Mode时,需要停止当前的Loop,然后重启新的Loop

Topic: UITrackingRunLoopMode 与 Timer

使用默认方式设置添加的Timer默认在NSDefuatRunLoopMode模式下,当ScrollView等滑动时模式会被切换到 UITrackingRunLoopMode,就会影响到Timer的计时,所以可以将Timer添加到NSRunLoopCommonModes下的RunLoop中

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

RunLoop的挂起和唤醒

RunLoop使用

例:TableView(滚动时)延迟加载图片

let downloadImage = ...
avatarImageView.perform(#selector(setter: UIImageView.image), with: downloadImage, afterDelay: 0, inModes: [.defaultRunLoopMode])

将图片设置的方法放到DefuatRunLoopMode模式下,当滑动时就不会执行该方法,停止滑动后再执行

上一篇 下一篇

猜你喜欢

热点阅读