GCD隊列queue.h__other

隊列queue.h方法總覽


queue.h

Queue相關(guān)其他方法

一、迭代執(zhí)行任務(wù)

/**
dispatch_apply函數(shù)是dispatch_sync函數(shù)和Dispatch Group的關(guān)聯(lián)API
該函數(shù)按指定的次數(shù)將指定的Block追加到指定的Dispatch Queue中,并等到全部的處理執(zhí)行結(jié)束
     
@param iterations    指定重復(fù)次數(shù) 
@param queue 追加對象的Dispatch Queue
@param index 帶有參數(shù)的Block, index的作用是為了按執(zhí)行的順序區(qū)分各個Block
*/
void
dispatch_apply(size_t iterations, dispatch_queue_t queue,
        DISPATCH_NOESCAPE void (^block)(size_t));


void
dispatch_apply_f(size_t iterations, dispatch_queue_t queue,
    void *_Nullable context,
    void (*work)(void *_Nullable, size_t));

舉例說明:

//任務(wù)都是同步執(zhí)行,會阻塞主線程(dispatch_apply是同步方法)
dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INITIATED, -1);
dispatch_queue_t queue = dispatch_queue_create("com.Maker", attr);
dispatch_apply(3, queue, ^(size_t index) {
    for (int i = 0; i < 5; i++) {
        if (index == 0) {
            NSLog(@"任務(wù)內(nèi)部順序----%d 任務(wù)順序====%zu", i,index);
        }
        else if (index == 1) {
            NSLog(@"任務(wù)內(nèi)部順序----%d 任務(wù)順序~~~~%zu", i,index);
        }
        else if (index == 2) {
            NSLog(@"任務(wù)內(nèi)部順序----%d 任務(wù)順序____%zu", i,index);
        }
        else {
            NSLog(@"任務(wù)內(nèi)部順序----%d 任務(wù)順序++++%zu", i,index);
        }
    }
});

二、延遲執(zhí)行

/**
延遲執(zhí)行任務(wù)

@param when  延遲執(zhí)行的時間
@param queue 指定在某一隊列中延遲執(zhí)行
@param block 執(zhí)行的具體任務(wù)
*/
void
dispatch_after(dispatch_time_t when,
    dispatch_queue_t queue,
    dispatch_block_t block);
/**
延遲執(zhí)行任務(wù)

@param when  延遲執(zhí)行的時間
@param queue 指定在某一隊列中延遲執(zhí)行
@param context 傳遞給work的任意類型(void *)參數(shù)
@param work 執(zhí)行的C語言函數(shù)名(函數(shù)指針)
*/
void
dispatch_after_f(dispatch_time_t when,
    dispatch_queue_t queue,
    void *_Nullable context,
    dispatch_function_t work);

舉例說明:

//這個任務(wù)將會在10秒后執(zhí)行
/*----dispatch_after----*/
int delayInSeconds = 10;
dispatch_time_t delaytime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(delaytime, dispatch_get_main_queue(), ^{
    //任務(wù)
});

/*----dispatch_after_f----*/
int context = 10;
int delayInSeconds = 10;
dispatch_time_t delaytime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after_f(delaytime, dispatch_get_main_queue(), &context, logCount);

void logCount(void* context) {
    int *c = context;
    NSLog(@"內(nèi)存地址 === %p 值 === %d", &c,*c);
}

三、設(shè)置隊列屬性

/**
隊列屬性(串行/并發(fā)、優(yōu)先級等)

@param attr  隊列屬性(DISPATCH_QUEUE_SERIAL / DISPATCH_QUEUE_CONCURRENT)
*/
dispatch_queue_attr_t
dispatch_queue_attr_make_initially_inactive(
        dispatch_queue_attr_t _Nullable attr);

/**
隊列屬性(串行/并發(fā)、優(yōu)先級等)

@param attr  隊列屬性(DISPATCH_QUEUE_SERIAL / DISPATCH_QUEUE_CONCURRENT)
@param frequency 
*/
dispatch_queue_attr_t
dispatch_queue_attr_make_with_autorelease_frequency(
        dispatch_queue_attr_t _Nullable attr,
        dispatch_autorelease_frequency_t frequency);

/**
隊列屬性(串行/并發(fā)、優(yōu)先級等)

@param attr  隊列屬性(DISPATCH_QUEUE_SERIAL / DISPATCH_QUEUE_CONCURRENT)
@param qos_class 
@param relative_priority 
*/
dispatch_queue_attr_t
dispatch_queue_attr_make_with_qos_class(dispatch_queue_attr_t _Nullable attr,
        dispatch_qos_class_t qos_class, int relative_priority);

三、其他相關(guān)方法(不常用)

const char *
dispatch_queue_get_label(dispatch_queue_t _Nullable queue);

dispatch_qos_class_t
dispatch_queue_get_qos_class(dispatch_queue_t queue,
        int *_Nullable relative_priority_ptr);

void
dispatch_set_target_queue(dispatch_object_t object,
        dispatch_queue_t _Nullable queue);

void
dispatch_main(void);

void
dispatch_queue_set_specific(dispatch_queue_t queue, const void *key,
    void *_Nullable context, dispatch_function_t _Nullable destructor);

void *_Nullable
dispatch_queue_get_specific(dispatch_queue_t queue, const void *key);

void *_Nullable
dispatch_get_specific(const void *key);

void
dispatch_assert_queue_barrier(dispatch_queue_t queue);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,678評論 19 139
  • GCD GCD簡介 Grand Central Dispatch中樞調(diào)度器 純C語言的,提供了非常強大的函數(shù) 優(yōu)勢...
    彼岸的黑色曼陀羅閱讀 552評論 0 0
  • 現(xiàn)在iOS的多線程方案主要有以下這幾種: GCD(Grand Central Dispatch):使用dispat...
    寒光冷劍閱讀 1,881評論 0 2
  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 由于GCD相關(guān)知識比較多,因此這里分成兩篇文章總結(jié)。 引言雖...
    LeaderBiao閱讀 594評論 1 2
  • 開放二胎三胎有屁用啊,[傲慢]還不是女人辛苦?又要生、又要帶、還要顧家,[發(fā)怒]有本事開放二夫?。。。。ㄒ粋€賺錢,...
    夕柏玟閱讀 224評論 6 8

友情鏈接更多精彩內(nèi)容