美文网首页
iOS 多线程提升

iOS 多线程提升

作者: XieHenry | 来源:发表于2021-03-28 22:41 被阅读0次
    1.NSOprationQueue 与 GCD 的区别与选用?

    NSOprationQueue 与 GCD 的区别与选用

    NSThread、GCD、NSOperation多线程编程总结
    多线程 GCD NSThread NSOperation

    2.iOS系统为我们提供的几种多线程技术各自的特点是怎样的?

    GCD实现一些简单的线程同步。包括子线程的分派 多读单写 倒计时 单例等

    NSOperation、NSOperationQunue
    第三方框架AFNetworking,SDWebImage、因为对任务的状态进行控制的特点(添加依赖。移除依赖)。

    NSThread
    实现常驻线程。

    3.NSOperation对象在Finished之后是怎样从queue当中移除掉的、

    会在内部通过KVO的方式通知他所对应的NSOperationQunue。然后移除.

    4.怎么利用GCD实现多读单写?

    创建一个并发队列。使用dispatch_sync同步读取指定数据。使用dispatch_barrier_async异步栅栏调用设置数据。


    图示
    5.使用GCD实现这个需求:A,B,C三个任务并发,完成后执行任务D?
    dispatch_group_t group =  dispatch_group_create();
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            // 执行1个耗时的异步操作
            NSLog(@"%@",[NSThread currentThread]);
        });
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            // 执行1个耗时的异步操作
            NSLog(@"%@",[NSThread currentThread]);
        });
        dispatch_group_notify(group, dispatch_get_main_queue(), ^{
            // 等前面的异步操作都执行完毕后,回到主线程...
            NSLog(@"结束");
        });
    
    6.多线程真题示例:
    image.png image.png

    原因:主队列的viewDidLoad需要block完成才会继续执行。
    因为主队列的先进先出的性质,block需要viewDidLoad先完成才能提交。就会造成死锁。

    image.png image.png
    image.png
    image.png

    原因:gcd创建的线程默认情况下没有开辟RunLoop。但是performSelector需要在当前线程有runloop才能运行。

    5. 出错前.png image.png

    相关文章

      网友评论

          本文标题:iOS 多线程提升

          本文链接:https://www.haomeiwen.com/subject/icomhltx.html