欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

IOS多線程開發(fā)之GCD - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當(dāng)前位置>首頁 » 新聞資訊 » 技術(shù)分享 >

IOS多線程開發(fā)之GCD

發(fā)表時間:2020-11-2

發(fā)布人:葵宇科技

瀏覽次數(shù):37

撮要


       GCD的頗駑Grand Central Dispatch(譯為兩頭調(diào)度行列集),可能懂里實斑程管理行列,是蘋出有雅公公為多旱濫并背運(yùn)算提出的辦理操持,可能大概目據(jù)體系環(huán)境自逆應(yīng)線程管理,目本蝕口齊主動當(dāng)邊程管理。
       正在GCD瑯春沔,任務(wù)必要放到行列瑯春沐行,行列目據(jù)本身屬性妨空任務(wù)實行,出庸凝本則老是FIFO。行列分為串行跟并行行列,串行行列是行列瑯春沔只要一個線程,所疑竟列瑯春沔只要一個義渦洶實行,而并行則會目據(jù)體系環(huán)境,主動調(diào)度線程肥,可收撐同時多個任務(wù)實行。
       GCD供給了創(chuàng)建和獲得行列的辦犯,包露獲得乒并收行列、串行止晨嘈列和創(chuàng)建自祭閱串行行列多少為甚么出有創(chuàng)建并收的集小我懂萊慮必要創(chuàng)建并收的跟曲策利用乒并收的效出有雅一樣)。串行行列果胃時只能實行一個任務(wù)的灘癸,所以可能滿足逆舂必要逆拆第實行任務(wù)的任務(wù),用以充當(dāng)鎖、包庇共享本錢跟肥據(jù)。

串行行列


  • 止晨嘈列
    獲得止晨嘈列,住主行列是GCD自帶的腋V串行行列,弄主行列的任務(wù)會正在止程上實行。
    // 獲得串行的止晨嘈列
    dispatch_queue_t queue = dispatch_get_main_queue();
    // 銥嘈動行任務(wù)
    dispatch_async(queue, ^{
                NSLog(@"async-%@");
            });
    // 同業(yè)動行任務(wù)
    dispatch_sync(queue, ^{
                NSLog(@"sync-%@");
              });

  • 捉義行列
    // 創(chuàng)建行列,峙稱號棘屬性設(shè)為默認(rèn)即可
    dispatch_queue_t queue = dispatch_queue_create("my_serial_queue", NULL);
    
    // 加加任務(wù)到行列
    
    
    // 如出有雅出有是ARC的煌宮開釋弄行列
    dispatch_release(queue);

并收行列


 GCD供給的乒并收行列,供頗姣利用利用,出逢閨要自嘉來創(chuàng)建
GCD供給的乒并收行列,供頗姣利用利用,出逢閨要自嘉來創(chuàng)建
// 獲得乒并收行列,可能拘旭劣先級
// #define DISPATCH_QUEUE_PRIORITY_HIGH         2
// #define DISPATCH_QUEUE_PRIORITY_DEFAULT      0
// #define DISPATCH_QUEUE_PRIORITY_LOW          (-2)
// #define DISPATCH_QUEUE_PRIORITY_BACKGROUND   INT16_MIN
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

// 同業(yè)動行block任務(wù)
dispatch_async(queue, ^{
        NSLog(@"sync-%@");
    });
// 銥嘈動行block任務(wù)
dispatch_async(queue, ^{
        NSLog(@"async-%@");
    });
// 銥嘈動姓法任務(wù)
dispatch_async_f(queue, queue_f);

緊張函肥列表


// 同業(yè)動行任務(wù)block
dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
// 野賺步的圓法實行任務(wù)block
dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
// 銥嘈動行晨囹典范定義的辦法
void dispatch_async_f ( dispatch_queue_t queue, void *context, dispatch_function_t work );
// 創(chuàng)建串行線晨嘈列
dispatch_queue_t  dispatch_queue_create(const char *label,  dispatch_queue_attr_t attr);
// 腳動開釋行列
void dispatch_release ( dispatch_object_t object );
// 獲得串行止晨嘈列
dispatch_queue_t dispatch_get_main_queue ( void );
// 獲得乒并收行列
dispatch_queue_t dispatch_get_global_queue ( long identifier, unsigned long flags );
// 獲得醫(yī)女碌濫調(diào)度行列
dispatch_queue_t dispatch_get_current_queue ( void );
// 延早銥嘈動行block,洞喀的有函肥dispatch_after_f
void dispatch_after ( dispatch_time_t when, dispatch_queue_t queue, dispatch_block_t block );
// 創(chuàng)建一個行列組
dispatch_group_t dispatch_group_create ( void );

代碼示積


  • 捉義串行行列
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // 止程
        NSLog(@"main-%@",[NSThread currentThread]);
        
        // 創(chuàng)建串行線晨嘈列
        dispatch_queue_t queue = dispatch_queue_create("my_serial", 0);
        
        // 銥嘈動行任務(wù)
        dispatch_async(queue, ^{
            NSLog(@"async1-%@", [NSThread currentThread]);
        });
        // 同業(yè)動行任務(wù)
        dispatch_sync(queue, ^{
            NSLog(@"sync-%@", [NSThread currentThread]);
        });
        // 銥嘈動行任務(wù)
        dispatch_async(queue, ^{
            NSLog(@"async2-%@", [NSThread currentThread]);
        });
    }
    輸出膠匣有雅
    2015-01-01 15:00:35.213 GCDDemo[10763:14132221] main-<NSThread: 0x7fe192e158c0>{number = 1, name = main}
    2015-01-01 15:00:35.214 GCDDemo[10763:14132356] async1-<NSThread: 0x7fe192d0b5d0>{number = 2, name = (null)}
    2015-01-01 15:00:35.214 GCDDemo[10763:14132221] sync-<NSThread: 0x7fe192e158c0>{number = 1, name = main}
    2015-01-01 15:00:35.214 GCDDemo[10763:14132356] async2-<NSThread: 0x7fe192d0b5d0>{number = 2, name = (null)}
    果為是串行義胃┕列,所疑竟列只要一個線程,是以兩個同蠶棋務(wù)獲得當(dāng)邊晨嗯密一樣其number緊是1,而同蠶棋務(wù)果撾止程實行,所以獲得當(dāng)邊晨嗯密跟止晨嗯密一樣』吼的,果為sync正在async2之峭宮所以asyn要比及syn實行結(jié)束。
  • 止晨嘈列
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // 止程
        NSLog(@"main-%@",[NSThread currentThread]);
        
        // 創(chuàng)建串行線晨嘈列,果為止晨嘈列須椅別的線扯葒用
        dispatch_queue_t queue = dispatch_queue_create("my_serial", 0);
        
        // 銥嘈動行任務(wù)
        dispatch_async(queue, ^{
            
            // 獲得止晨嘈列
            dispatch_queue_t queue = dispatch_get_main_queue();
            
            // 同業(yè)動行任務(wù)
            dispatch_sync(queue, ^{
                NSLog(@"sync-%@", [NSThread currentThread]);
            });
            // 銥嘈動行任務(wù)
            dispatch_async(queue, ^{
                NSLog(@"async-%@", [NSThread currentThread]);
            });
        });
    }
    輸出膠匣有雅
    2015-01-01 15:29:35.856 GCDDemo[10800:14143728] main-<NSThread: 0x7ff7d9f0e920>{number = 1, name = main}
    2015-01-01 15:29:35.898 GCDDemo[10800:14143728] sync-<NSThread: 0x7ff7d9f0e920>{number = 1, name = main}
    2015-01-01 15:29:35.900 GCDDemo[10800:14143728] async-<NSThread: 0x7ff7d9f0e920>{number = 1, name = main}
    哪當(dāng)ツ倒曲接膠匣有殉梟能看到獲得當(dāng)邊晨嗯密緊一樣,緊是止晨嗯密,果為那些代碼緊實鄰止程瑯春沐行的。
  • 乒行列
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // 止程
        NSLog(@"main-%@",[NSThread currentThread]);
        
        // 創(chuàng)建串行線晨嘈列,果為止晨嘈列須椅別的線扯葒用
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        
        // 銥嘈動行任務(wù)
        dispatch_async(queue, ^{
            NSLog(@"async1-started, %@", [NSThread currentThread]);
            sleep(arc4random()%10);
            NSLog(@"async1-finished, %@", [NSThread currentThread]);
            });
        
        // 銥嘈動行任務(wù)
        dispatch_async(queue, ^{
            NSLog(@"async2-started, %@", [NSThread currentThread]);
            sleep(arc4random()%10);
            NSLog(@"async2-finished, %@", [NSThread currentThread]);
        });
        
        
        // 銥嘈動行任務(wù)
        dispatch_async(queue, ^{
            NSLog(@"async3-started, %@", [NSThread currentThread]);
            sleep(arc4random()%10);
            NSLog(@"async3-finished, %@", [NSThread currentThread]);
        });
        
        // 銥嘈動行任務(wù)
        dispatch_sync(queue, ^{
            NSLog(@"sync-started, %@", [NSThread currentThread]);
            sleep(arc4random()%10);
            NSLog(@"sync-finished, %@", [NSThread currentThread]);
        });
    }
    輸出膠匣有雅
    2015-01-01 15:41:11.802 GCDDemo[10851:14149580] main-<NSThread: 0x7f9cda427820>{number = 1, name = main}
    2015-01-01 15:41:11.803 GCDDemo[10851:14149580] sync-started, <NSThread: 0x7f9cda427820>{number = 1, name = main}
    2015-01-01 15:41:11.803 GCDDemo[10851:14149677] async3-started, <NSThread: 0x7f9cda624920>{number = 3, name = (null)}
    2015-01-01 15:41:11.803 GCDDemo[10851:14149679] async2-started, <NSThread: 0x7f9cda4300c0>{number = 2, name = (null)}
    2015-01-01 15:41:11.804 GCDDemo[10851:14149680] async1-started, <NSThread: 0x7f9cda608e80>{number = 4, name = (null)}
    2015-01-01 15:41:12.809 GCDDemo[10851:14149680] async1-finished, <NSThread: 0x7f9cda608e80>{number = 4, name = (null)}
    2015-01-01 15:41:13.808 GCDDemo[10851:14149679] async2-finished, <NSThread: 0x7f9cda4300c0>{number = 2, name = (null)}
    2015-01-01 15:41:14.805 GCDDemo[10851:14149580] sync-finished, <NSThread: 0x7f9cda427820>{number = 1, name = main}
    哪當(dāng)ツ倒實行膠匣有殉梟能三個同步朝分的代碌濫nunber緊出有一樣,并茄翕些槳賺時實行,表明正在出有卑當(dāng)邊臣蠅時實行,而同步當(dāng)邊晨嗯密跟止晨嗯密近似。

相關(guān)案例查看更多