久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

IOS中的GDC簡(jiǎn)單的用法

 尹亮亮 2015-12-21
主線程做的事情

dispatch_queue_t mainQueue= dispatch_get_main_queue();
    dispatch_sync(mainQueue, ^{
        [self updateImageWithData:data andIndex:i];
    });

多線程串行隊(duì)列

/*創(chuàng)建一個(gè)串行隊(duì)列
     第一個(gè)參數(shù):隊(duì)列名稱
     第二個(gè)參數(shù):隊(duì)列類型
    */
    dispatch_queue_t serialQueue=dispatch_queue_create("myThreadQueue1", DISPATCH_QUEUE_SERIAL);//注意queue對(duì)象不是指針類型
    //創(chuàng)建多個(gè)線程用于填充圖片
    for (int i=0; i<count; ++i) {
        //異步執(zhí)行隊(duì)列任務(wù)
        dispatch_async(serialQueue, ^{
            [self loadImage:[NSNumber numberWithInt:i]];
        });
        
    }//非ARC環(huán)境請(qǐng)釋放 dispatch_release(seriQueue);

并發(fā)隊(duì)列
 dispatch_queue_t globalQueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    //創(chuàng)建多個(gè)線程用于填充圖片
    for (int i=0; i<count; ++i) {
        //異步執(zhí)行隊(duì)列任務(wù)
        dispatch_async(globalQueue, ^{
            [self loadImage:[NSNumber numberWithInt:i]];
        });
    }

GCD執(zhí)行任務(wù)的方法并非只有簡(jiǎn)單的同步調(diào)用方法和異步調(diào)用方法,,還有其他一些常用方法:

  1. dispatch_apply():重復(fù)執(zhí)行某個(gè)任務(wù),但是注意這個(gè)方法沒(méi)有辦法異步執(zhí)行(為了不阻塞線程可以使用dispatch_async()包裝一下再執(zhí)行),。
  2. dispatch_once():單次執(zhí)行一個(gè)任務(wù),此方法中的任務(wù)只會(huì)執(zhí)行一次,,重復(fù)調(diào)用也沒(méi)辦法重復(fù)執(zhí)行(單例模式中常用此方法),。
  3. dispatch_time():延遲一定的時(shí)間后執(zhí)行,。
  4. dispatch_barrier_async():使用此方法創(chuàng)建的任務(wù)首先會(huì)查看隊(duì)列中有沒(méi)有別的任務(wù)要執(zhí)行,,如果有,則會(huì)等待已有任務(wù)執(zhí)行完畢再執(zhí)行,;同時(shí)在此方法后添加的任務(wù)必須等待此方法中任務(wù)執(zhí)行后才能執(zhí)行,。(利用這個(gè)方法可以控制執(zhí)行順序,例如前面先加載最后一張圖片的需求就可以先使用這個(gè)方法將最后一張圖片加載的操作添加到隊(duì)列,,然后調(diào)用dispatch_async()添加其他圖片加載任務(wù))
  5. dispatch_group_async():實(shí)現(xiàn)對(duì)任務(wù)分組管理,,如果一組任務(wù)全部完成可以通過(guò)dispatch_group_notify()方法獲得完成通知(需要定義dispatch_group_t作為分組標(biāo)識(shí))。

解決線程對(duì)資源的搶占性問(wèn)題的原理

           在GCD中提供了一種信號(hào)機(jī)制,,也可以解決資源搶占問(wèn)題(和同步鎖的機(jī)制并不一樣),。GCD中信號(hào)量是dispatch_semaphore_t類型,支持信號(hào)通知和信號(hào)等待,。每當(dāng)發(fā)送一個(gè)信號(hào)通知,,則信號(hào)量+1;每當(dāng)發(fā)送一個(gè)等待信號(hào)時(shí)信號(hào)量-1,,;如果信號(hào)量為0則信號(hào)會(huì)處于等待狀態(tài),,直到信號(hào)量大于0開(kāi)始執(zhí)行,。根據(jù)這個(gè)原理我們可以初始化一個(gè)信號(hào)量變量,默認(rèn)信號(hào)量設(shè)置為1,,每當(dāng)有線程進(jìn)入“加鎖代碼”之后就調(diào)用信號(hào)等待命令(此時(shí)信號(hào)量為0)開(kāi)始等待,,此時(shí)其他線程無(wú)法進(jìn)入,執(zhí)行完后發(fā)送信號(hào)通知(此時(shí)信號(hào)量為1),,其他線程開(kāi)始進(jìn)入執(zhí)行,,如此一來(lái)就達(dá)到了線程同步目的。
問(wèn)題原型:假設(shè)現(xiàn)在有9張圖片,,但是有15個(gè)線程都準(zhǔn)備加載這9張圖片,,約定不能重復(fù)加載同一張圖片,這樣就形成了一個(gè)資源搶奪的情況,。在下面的程序中將創(chuàng)建9張圖片,,每次讀取照片鏈接時(shí)首先判斷當(dāng)前鏈接數(shù)是否大于1,用完一個(gè)則立即移除,,最多只有9個(gè)

解決線程對(duì)資源的搶占性問(wèn)題的解決方案

    /*信號(hào)等待
     第二個(gè)參數(shù):等待時(shí)間
     */
    dispatch_semaphore_wait(_semaphore, DISPATCH_TIME_FOREVER);
    if (_imageNames.count>0) {
        name=[_imageNames lastObject];
        [_imageNames removeObject:name];
    }
    //信號(hào)通知
    dispatch_semaphore_signal(_semaphore);

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多