日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

4月11日 GCD 总结(二)

發(fā)布時(shí)間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4月11日 GCD 总结(二) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
4月11日?GCD 總結(jié)(二) 一、指定一定數(shù)量的延遲之后,使用 GCD 來(lái)執(zhí)行代碼--使用 Dispatch_after 和 Dispatch_after_f 函數(shù)

1、?dispatch_after

在一段給定的、以納秒為單位的時(shí)間段之后,將 Block Object 分派到一個(gè)分派隊(duì)列。這

個(gè)函數(shù)需要的參數(shù)有:

Delay in nanoseconds

在執(zhí)行指定的 Block Object(由第三個(gè)參數(shù)指定)之前 GCD 必須在一個(gè)給定的分派隊(duì)列 (由第二個(gè)參數(shù)指定) 上等待的納秒數(shù)。

Dispatch queue

Block Object (由第三個(gè)參數(shù)指定)在給定的延遲(由第一個(gè)參數(shù)指定)之后必須執(zhí)行在其上執(zhí)行的派送隊(duì)列。

Block object

在指定的分派隊(duì)列上等待一定納秒后 Block Object 會(huì)被調(diào)用;它沒(méi)有返回值并且不接受參數(shù)

?


int64_t delayInSeconds = 20.0;

? ? dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);

? ? dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

? ? ? ? //

? ? ? ? NSLog(@"oh fuck!");

? ? });



像你看到的那樣,對(duì)于 dispatch_after 和 dispatch_after_f 函數(shù)納秒級(jí)延遲參數(shù)必須是類 dispatch_time_t,它是絕對(duì)時(shí)間的抽象表示形式。要得到這個(gè)參數(shù)的值,你要用此代碼中演示的 dispatch_time 函數(shù)。這里是您可以傳遞給 dispatch_time 函數(shù)的參數(shù):

Base time

假設(shè)這個(gè)值為 B,Delta parameter 值為 D,通過(guò)這個(gè)函數(shù)結(jié)束的時(shí)間就等于 B+D。您可以設(shè)置此參數(shù)的值到 DISPATCH_TIME_NOW 來(lái)把現(xiàn)在作為基時(shí)間,然后從現(xiàn)在使用 Delta 參數(shù)來(lái)確定 Delta。

Delta to add to base time

這個(gè)參數(shù)是要增加到計(jì)算時(shí)間參數(shù)來(lái)獲取函數(shù)結(jié)果的納秒。例如,表示一個(gè)從現(xiàn)在開(kāi)始 3 秒的時(shí)間,你可以這樣來(lái)寫你的代碼:

dispatch_time_t delay =
dispatch_time(DISPATCH_TIME_NOW, 3.0f * NSEC_PER_SEC); 或者表示從現(xiàn)在開(kāi)始半秒的時(shí)間:
dispatch_time_t delay =
dispatch_time(DISPATCH_TIME_NOW, (1.0 / 2.0f) * NSEC_PER_SEC);?





2、dispatch_after_f

分派一個(gè) C 函數(shù)到 GCD 在限定的、以納秒限定的時(shí)間之后執(zhí)行,這個(gè)函數(shù)接受 4 個(gè)參數(shù):

Delay in nanoseconds

在執(zhí)行給定函數(shù)之前 (由第四個(gè)參數(shù)指定)GCD 必須在指定派送隊(duì)列(由第二個(gè)參數(shù)指定) 上等待的納秒數(shù)。

Dispatch queue

C 函數(shù) (由第四個(gè)參數(shù)指定) 必須在給定延遲(由第一個(gè)參數(shù)指定)之后在其上執(zhí)行分派送隊(duì)列。

Context
一個(gè)值在堆中傳遞到了 C 函數(shù)的內(nèi)存地址 (舉例見(jiàn) 5.5)。
C 函數(shù)
在特定時(shí)間段(由第一個(gè)參數(shù)指定)之后必須執(zhí)行的 C 函數(shù)在給定分派隊(duì)列中(由第二個(gè)

參數(shù)指定)的地址。

{

double delayInSeconds = 2.0;

? ? dispatch_time_t delayInNanoSeconds=dispatch_time(DISPATCH_TIME_NOW, delayInNanoSeconds*NSEC_PER_SEC);

? ? dispatch_queue_t cur=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

? ? dispatch_after_f(delayInNanoSeconds, cur, NULL, processSomething);

}


void processSomething(void *paramContext)

{

? ? /* Do your processing here */

? ? NSLog(@"Processing...");

}


二、在?GCD?上一個(gè)任務(wù)最多執(zhí)行一次--使用?dispatch_once?函數(shù)



函數(shù)?dispatch_once,它接受 2 個(gè)

參數(shù):

Token
一個(gè)類 dispatch_once_t 的 Token 持有 GCD 是代碼塊第一次執(zhí)行時(shí)生成的 Token。如果

你想最多一次執(zhí)行一段代碼,那么無(wú)論什么時(shí)候這個(gè)代碼在 APP 中被調(diào)用你必須指定在這

個(gè)方法中指定同樣的 Token。

?Block Object

Block Object 最多執(zhí)行一次。這個(gè) Block Object 返回時(shí)沒(méi)有值并且沒(méi)有參數(shù)。 dispatch_once 總是被發(fā)出呼叫的代碼用來(lái)在當(dāng)前隊(duì)列上執(zhí)行任務(wù),它可能是一個(gè)串行隊(duì)列、一個(gè)并發(fā)隊(duì)列或者一個(gè)主隊(duì)列。


?static dispatch_once_t onceToken;

? ? dispatch_once(&onceToken, ^{

?? ? ? ?

? ? });






總結(jié)

以上是生活随笔為你收集整理的4月11日 GCD 总结(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。