前面, 我们讲完了 NSOperation 的使用, 现在让我们来看看在 iOS 中得一些多线程开发的注意事项.
1.Run Loop
在 iOS 中, 它有一种运行机制, 叫做 Run Loop, 让我们来看看什么是 Run Loop
1.Run Loop提供了⼀种异步执⾏代码的机制,不能并⾏执⾏任务.
2.在朱队列中, Main Run Loop直接配合任务的执行, 负责处理 UI 事件, 计时器, 以及其他内核相关事件.
3.Run Loop的主要目的是保证程序执行的线程不会被系统终止.
2.Run Loop特点
1.当有事件发⽣时,Run Loop会根据具体的事件类型通知应⽤程序做出响应
2.当没有事件发生时,Run Loop会进⼊休眠状态,从⽽达到省电的⽬的
3.当事件再次发生时,Run Loop会被重新唤醒,处理事件
主线程和其他线程中的Run Loop
1.iOS程序的主线程默认已经配置好了Run Loop.
2.其他线程默认情况下没有设置Run Loop.
PS: ⼀般在开发中很少会主动创建RunLoop, ⽽通常会把事件添加到RunLoop中
示意图:
3.多线程的循环引用
如果self对象持有操作对象的引⽤,同时操作对象当中又直接访问了self时, 才会造成循环引⽤
单纯在操作对象中使用self不会造成循环引⽤
PS: 此时不能使用(weakSelf), 如果使用了 weakSelf, 那么线程就会在没有执行, 或者执行了一部分的时候直接退出.
PS: 由于 Swift 有非常严格的初始化方法, 并且取消了 OC 中的 dealloc方法, 所以这里就不用代码演示了, 大家只要知道在多线程循环引用中的一些注意事项就好了
好了, 这次就讲到这里, 下次我们继续~~~