1. 程式人生 > 其它 >iOS開發之dispatch_async 用法

iOS開發之dispatch_async 用法

技術標籤:遊戲

- (void) initSDKFinish {
    InitParameter *initParameter = [[InitParameter alloc]init];
    initParameter.cpID = @"";
    initParameter.gameID = @"";
    initParameter.gameKey = @"";
    initParameter.pubID = @"";
    
    [[ThreeState shareInstance]initThreeStateWithInitParameter:initParameter Closure:^(NSInteger state, NSString * _Nonnull msg) {
        if (state == 0) {
            dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"SDK初始化成功 - %ld,%@",(long)state,msg);
            //            [self loginButtonClicked];
            [AppTools evalStringWithJsonData:@"ZCSDK.initSDKResult" jsonObject:@{}];
            });
        }else {
            NSLog(@"SDK初始化失敗 - %ld,%@",(long)state,msg);
        }
    }];
    
};

GCD (Grand Central Dispatch) 是Apple公司開發的一種技術,它旨在優化多核環境中的併發操作並取代傳統多執行緒的程式設計模式。 在Mac OS X 10.6和IOS 4.0之後開始支援GCD。

dispatch_async(dispatch_get_global_queue(0, 0), ^{ 
// 處理耗時操作的程式碼塊... 

//通知主執行緒重新整理 
dispatch_async(dispatch_get_main_queue(), ^{ 
//回撥或者說是通知主執行緒重新整理, 
}); 

});

dispatch_async開啟一個非同步操作,第一個引數是指定一個gcd佇列,第二個引數是分配一個處理事物的程式塊到該佇列。

dispatch_get_global_queue(0, 0),指用了全域性佇列。
一般來說系統本身會有3個佇列。
global_queue,current_queue,以及main_queue.
獲取一個全域性佇列是接受兩個引數,第一個是我分配的事物處理程式塊佇列優先順序。分高低和預設,0為預設2為高,-2為低