swift中利用系統線程實現異步加載數據同步更新UI


swift中的使用案例樣式

// Mark: -數據源更新

    typealias AddDataBlock = () ->Void

    var updataBlock:AddDataBlock?

 

func loadLiveData(){

        let grpup = DispatchGroup()

        grpup.enter()

        //        //首頁直播接口請求

        HomeLiveProvider.request(.liveList) { result in

            if case let .success(response) = result {

                //解析數據

                let data = try? response.mapJSON()

                let json = JSON(data!)

                if let mappedObject = JSONDeserializer<HomeLiveModel>.deserializeFrom(json: json.description) { // 從字符串轉換為對象實例

                    self.lives = mappedObject.data?.lives

                    self.categoryVoList = mappedObject.data?.categoryVoList

//                    self.collectionView.reloadData()

                    // 更新tableView數據

//                    self.updataBlock?()

                    grpup.leave()

                }

            }

        }

        

        grpup.enter()

        //        //首頁直播滾動圖接口請求

        HomeLiveProvider.request(.liveBannerList) { result in

            if case let .success(response) = result {

                //解析數據

                let data = try? response.mapJSON()

                let json = JSON(data!)

                if let mappedObject = JSONDeserializer<HomeLiveBanerModel>.deserializeFrom(json: json.description) { // 從字符串轉換為對象實例

                    self.homeLiveBanerList = mappedObject.data

                    //                    let index: IndexPath = IndexPath.init(row: 0, section: 1)

                    //                    self.collectionView.reloadItems(at: [index])

                    // 更新tableView數據

//                    self.updataBlock?()

                    grpup.leave()

                }

            }

        }

        

        

        

        grpup.enter()

        //        //首頁直播排行榜接口請求

        HomeLiveProvider.request(.liveRankList) { result in

            if case let .success(response) = result {

                //解析數據

                let data = try? response.mapJSON()

                let json = JSON(data!)

                if let mappedObject = JSONDeserializer<HomeLiveRankModel>.deserializeFrom(json: json.description) { // 從字符串轉換為對象實例

                    self.multidimensionalRankVos = mappedObject.data?.multidimensionalRankVos

                    //                    let index: IndexPath = IndexPath.init(row: 0, section: 2)

                    //                    self.collectionView.reloadItems(at: [index])

                    // 更新tableView數據

//                    self.updataBlock?()

                    grpup.leave()

                }

            }

        }

        

        grpup.notify(queue: DispatchQueue.main) {

            self.updataBlock?()

        }

    }

 

oc中的使用樣式

 

//一個並發隊列

    dispatch_queue_t queueE = dispatch_queue_create("group.queue", DISPATCH_QUEUE_CONCURRENT);

    

    //一個線程組

    dispatch_group_t groupE = dispatch_group_create();

    ////1.請求輪播圖的數據

    dispatch_group_async(groupE, queueE, ^{

        dispatch_group_enter(groupE);

        dispatch_async(dispatch_get_global_queue(0, 0), ^{

            

            [self requestCarousel:^{

                dispatch_group_leave(groupE);

            }];

        });

        

    });

    ////2.請求新聞輪播圖的數據

    dispatch_group_async(groupE, queueE, ^{

        

        dispatch_group_enter(groupE);

        dispatch_async(dispatch_get_global_queue(0, 0), ^{

            

            [self requestNews:^{

                dispatch_group_leave(groupE);

            }];

        });

        

    });

    ////3.校園活動【師生展評】

    dispatch_group_async(groupE, queueE, ^{

        

        dispatch_group_enter(groupE);

        dispatch_async(dispatch_get_global_queue(0, 0), ^{

            

            //3.校園活動【師生展評】

            [self requestCampAcitivetis:^{

                dispatch_group_leave(groupE);

            }];

            

        });

        

    });

    

    ////4.尾部視圖

    dispatch_group_async(groupE, queueE, ^{

        

        dispatch_group_enter(groupE);

        dispatch_async(dispatch_get_global_queue(0, 0), ^{

            

            //3.尾部視圖

            [self requestClass:^{

                dispatch_group_leave(groupE);

            }];

            

        });

        

    });

    dispatch_group_notify(groupE, dispatch_get_main_queue(), ^{

        //staticWeakSelf 隨情況而定

        [staticWeakSelf setUpUI];

        

    });

 

 

//1.請求輪播圖的數據

- (void)requestCarousel:(void(^)(void))leveBlock{

  

 [AFHTTPRequestManager reqesutSuccess{

    

  

  if (leveBlock) {

            leveBlock();

        }

  } requestFaliure{

    

  if (leveBlock) {

            leveBlock();

        }

  }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM