0423 NSRunLoop/多线程

1) 每一个线程都有一个RunLoop
2) 主线程的RunLoop会由系统帮我们启动.
 
UIScrollView的滚动和下载同时进行,
如果滚动,下载会暂停.
演示:
1. 协议
2. 实例化scrollView,上面放4个View(不同色)
3. downloadQQ
1) url
2) urlRequest
3) connectionWithRequest
 
4) 打印下载长度 // 收到数据的代理方法.
 
 
现象: 
1) 滚动scrollView时,下载停住了
2) 松手下载继续.
 
程序跑在一个死循环里,每次看有没有事情要做..
有事情就指派给相应地程序去执行.如图:
// Switch to a different app 循环就暂时停掉.
// 死循环里有很多分支.
如果有UI就让它先去处理UI事件(所有其他的事情都暂时停掉,先去处理UI相关的事情)
// 方法 scheduleInRunLoop: forMode:
// NSRunLoopCommonModes 一般都用这种模式
 
// 注意:
1. 选用不是立即启动的连接模式(参数NO)
2. 配置好后,启动下载. (3. “启动下载"的注释打开)
 
补充: AFNetworking也是用相同的模式:
把需要改的放到一个集合里
 
 
// 总结:
 
定时器和ScrollView共存:
// 添加方法稍有不同: 
 

子线程RunLoop :
// 每个线程都有runLoop,主线程的是系统开启(系统驱动)的.
子线程必须手动启动runLoop , 不会自动运转.
 
1. 先获取当前线程RunLoop
2.直接run(最懒的方法),不管有事没事都会执行runLoop
// 但是,不好,没事做的时候,最好停下来.
// 改进:
1. 指定RunLoop跑在指定的模式下:
// NSDate: 指定一定时间,超时没事做就停下来.
代码如下:
 
2. 把RunLoop加到死循环中
3. 通过一个变量来控制当前循环
// 如果下载完毕,停止驱动RunLoop
4. 在代理方法中,控制finish
5. 完善循环,增加跳出条件:
 
// 所以,昨天的,在子线程里,执行下载是不会动的.
 
释疑:
这里是主线程开了一个子线程,子线程中执行异步下载,相当于子线程又开辟了一个子线程, 最下层的RunLoop需要手动启动.

转载于:https://www.cnblogs.com/toxicanty/p/4449646.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值