iOS面试

Swift-并发任务

2018-03-19  本文已影响185人  SK丿希望

个人思路(例如2个请求并发执行) (推荐)

1.可以定义2个Bool的属性

var isCompletedShoppingCart : Bool = false // 标记购物车数据网络请求是否完成
var isCompletedLove : Bool = false // 标记喜欢数据网络请求是否完成

2.请求

   // MARK: - 请求数据
   func loadData(page: NSInteger) {
        loadShoppingCartData()
        loadLoveData()
    }
   // MARK: - 请求购物车数据
   func loadShoppingCartData() {
        HWPrint("任务购物车执行完毕")
        isCompletedShoppingCart = true
        detection()
    }
   // MARK: - 请求喜欢数据
   func loadLoveData() {
        HWPrint("任务喜欢执行完毕")
        isCompletedLove = true
        detection()
    }
    // MARK: - 检测任务进度
    func detection() {
        if isCompletedLove && isCompletedShoppingCart {
            HWPrint("任务完成")
        }
    }

GCD Group并发执行 最后汇总(可能会失败 因为一般请求框架已经开了子线程了 故拦截不到)

    // MARK: - 请求数据
    func loadData(page: NSInteger) {
        weak var weakSelf = self // 弱引用
        let group = DispatchGroup()
        // 添加任务1
        DispatchQueue.global().async(group: group, execute: DispatchWorkItem.init(block: {
            weakSelf!.loadShoppingCartData()
        }))
        // 添加任务2
        DispatchQueue.global().async(group: group, execute: DispatchWorkItem.init(block: {
            weakSelf!.loadLoveData()
        }))
        // 汇总任务 组中所有任务都执行完了会发送通知
        group.notify(queue: DispatchQueue.main) {
            HWPrint("任务组的任务都已经执行完毕啦!")
        }
        HWPrint("任务完成")
    }
    // MARK: - 请求购物车数据
    func loadShoppingCartData() {
        HWPrint("任务购物车执行完毕")
    }
    // MARK: - 请求喜欢数据
    func loadLoveData() {
        HWPrint("任务喜欢执行完毕")
    }

打印结果

image.png
上一篇下一篇

猜你喜欢

热点阅读