dispatch_soruce_t的簡單使用事例

  __block int time = 3; //倒計時時間
    
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    //
    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
    
    dispatch_source_set_timer(timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0 * NSEC_PER_SEC);
    
    dispatch_source_set_event_handler(timer, ^{
        
        if(time<=0){
            
            dispatch_source_cancel(timer);  //沒有這句代碼不執行
            
            dispatch_async(dispatch_get_main_queue(), ^{
                
            });
            
        }else{
            time--;
        }
    });
    
    dispatch_resume(timer);


二。

   dispatch_source_t source = dispatch_source_create(DISPATCH_SOURCE_TYPE_DATA_ADD, 0, 0, dispatch_get_global_queue(0, 0));
    
    dispatch_source_set_event_handler(source, ^{
        
        dispatch_sync(dispatch_get_main_queue(), ^{
            //更新UI
            NSLog(@"source");
            dispatch_source_cancel(source);
        });
        
    });
    
    dispatch_resume(source);
    
    dispatch_sync(dispatch_get_global_queue(0, 0), ^{
        
        //網絡請求
        NSLog(@"request");
        dispatch_source_merge_data(source, 1); //通知隊列
        
    });



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章