zoukankan      html  css  js  c++  java
  • iOS 的 多线程的使用

    runloop

    主线程  的 Runloop对象 会自动开启, UIApplication开启了一个死循环(消息循环)

    每一个线程都有自己的 runloop 对象 

    runloop   1.> 输入源 input resource: (异步消息->处理其他线程)处理处理其他线程回到主线程做事情

                performSelector: onThread (线程之间通信)

          2.> 定时源  timer resource :(同步消息->处理主线程) 处理主线程的UI界面刷新,事件处理,定时器(定时解决界面上有没有UI刷新,滚动)

      

    开子线程特别耗费内存资源,所以需要对线程进行精准的管理

    1. 检查网络请求是否放在了主线程中

    2. 看看异步请求的数量是否太多了(子线程数量)

    3. 数据量是否太大? 如果太大,先清除一些不必要的对象(看不见的数据, 特别是图片)

      及时监听内存警告

      - (void) ApplicationDidReceiveMesonry

    多线程安全怎么控制?

    1. 只在主线程中刷新访问UI

    2. 如果要防止资源抢夺, 得用 synchronized 进行加锁保护

    3. 如果异步操作要保证线程安全问题, 尽量使用GCD (有些函数默认是线程安全的)

    异步线程中下载很多图片,如果失败了,如何处理?

    1. 重新下载图片

    2. 下载完毕后,利用Runloop 的 输入源回到主线程刷新UIImageView

    有些图片加载比较慢怎么处理?

    1. 图片下载放在异步线程

    2. 图片下载过程中使用占位图片

    3. 如果图片过大,可以考虑多线程断点下载 -> 设置请求头信息

    SDWebImage具体实现过程

    1. 利用NSOperationQueue 和 NSOperation 下载图片

    2. 还使用GCD的一些函数来解码GIF图片

    gif图片 (gif分解)->imageIO 切除所有帧 (每一帧都是UIImage对象)(这个过程比较耗时,放入异步线程中) 

    UIImageView * imageView;

    imageView.animationImages = ..;

    3. 利用URL作为key, NSOperation 作为 value

    4. 利用URL作为key, UIImage 作为 value

    利用NSNotificationCenter实现跨多控制器传输数据和消息中用异步还是同步?

    1. 如果通知是在主线程发出,那么接收通知的方法中的耗时操作要放到异步线程中

    [[NSNotificationCenter defaultCenter]  postNotificationName: @"abc" object; nil ];

    [[NSNotificationCenter defaultCenter]  addObserver: self selector: @selector(test) name: @"abc" object : nil];

    - (void) test { dispatch.....}

    2. 如果通知实在异步线程中发出,那么接收通知后调用的方法会默认在异步线程中执行

    dispatch_async ( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{

      [NSNotificationCenter defaultCenter]  postNotificationName: @"abc" object; nil ];

    });

    [[NSNotificationCenter defaultCenter]  addObserver: self selector: @selector(test) name: @"abc" object : nil];

    - (void) test {}

  • 相关阅读:
    python安装
    道德准则
    工作职场
    30岁之前
    互联网产品
    项目经理催活指南
    项目中如何找到优先级,以及工作时间安排
    语音行业相关概念
    cookie sessionStorage localStorage 的异同
    数组中map,forEach和for循环的区别
  • 原文地址:https://www.cnblogs.com/aunty/p/5120030.html
Copyright © 2011-2022 走看看