빠른 GCD의 간단한 사용

  • 다시 메인 스레드
        {DispatchQueue.main.async 
           // 인쇄 ( "여기에 메인 스레드입니다") 
        }

 

  • 지연 실행
        마감일 = DispatchTime.now 송출 () + 5.0 
        DispatchQueue.global () asyncAfter. (마감일 : 마감일) { 
            // 인쇄 ( "여기 연기 할") 
        }
  • 비동기 스레드를 엽니 다
        {DispatchQueue.main.async의 
            인쇄 ( "실행의 새로운 비동기 스레드를 열고") 
        }

 

  •  스레드 동기화를 열고
DispatchQueue.global (). 동기화 { 
            
}
  •  스레드 우선 순위
        큐 VAR : DispatchQueue DispatchQueue.global = ()가 // 
        //DispatchQueue.GlobalQueuePriority 선택이있다 4 높은`default`, 낮은, 배경. 
        대기열 = DispatchQueue.global (우선 순위 : DispatchQueue.GlobalQueuePriority.background) 배경 // 
        // 비동기 작업 실행 큐 
        queue.async { 
            // 인쇄 ( "새 스레드 실행을 열고") 
        }

 

  •  패킷 실행
       그룹 = DispatchGroup는하자가 () 
        대기열 = DispatchQueue.global (우선 순위 : DispatchQueue.GlobalQueuePriority.default가) // 기본 우선 순위를 수행 
        0 I에 대한 .. <10 { 
            // 비동기 작업 실행 큐 
            queue.async (그룹 : 그룹, 실행 { 
                인쇄 ( "queue.async은 (그룹 : 그룹 \ (나는)") 
            }) 
        } 
        // 실행 후 패킷 큐가 완료 
        : {(큐 큐) group.notify 
            인쇄 ( "dispatch_group_notify을") 
        }

 

  • 직렬 큐 : 하나의 스레드 만이 순차적으로 순차적 실행에 추가하여 큐의 동작에 추가된다.
       serialQueue = DispatchQueue 송출 (레이블 : "yangj", 속성 : []) 
        I 0에서 .. <10 { 
            // 비동기 작업 실행 큐 
            serialQueue.async { 
                인쇄 ( "serialQueue.async \ (I)") 
            } 
        }

 

  • 동시 큐 : 작업 우선 순위에 고급 유지하면서 여러 스레드가 있습니다, 그것은 가능한 프로세서 큐에서 이러한 조치의 수술 후 올 것이다.
        globalQueue = DispatchQueue.global 송출 (우선 순위 : DispatchQueue.GlobalQueuePriority.default) 
        I 0에서 .. <10 { 
            // 비동기 작업 실행 큐 
            globalQueue.async { 
                인쇄 ( "globalQueue.async \ (I)") 
            } 
        }
  •  신호기
       // DispatchSemaphore 신호 크기가 1이기 때문에, 당신은 단지 하나를 수행 할 수 
        송출 세마포어 DispatchSemaphore = (값 : 1) 
        송출 = DispatchQueue.global 큐 () 
        queue.async { 
            semaphore.wait () 
            송출 마감일 = DispatchTime.now () 3.0 + 
            DispatchQueue.global () asyncAfter. (마감일 : 마감일) { 
                인쇄 ( ". ----------------- 1"); 
                semaphore.signal () 
            } 
            
        } 
        queue.async { 
            semaphore.wait () 
            송출의 DispatchTime.now 마감일 = () + 10.0 
            DispatchQueue.global () asyncAfter. (마감일 : 마감일) { 
            } 
                 인쇄 ( "2 -----------------" );
                 semaphore.signal ()
            
        } 
        queue.async { 
            semaphore.wait () 
            하게 마감 = DispatchTime.now () + 2.0 
            DispatchQueue.global () asyncAfter. (마감 : 마감) { 
                인쇄 ( "-------------- ---삼"); 
                semaphore.signal () 
            } 
            
        }

 

  • dispatch_group_enter에서 OC 사용
        // 설정 한 일정 만들 
        송출 workingGroup DispatchGroup = ()를 
        여러 열 생성 // 
        workingQueue = DispatchQueue하자 (레이블 : "들은 request_queue을") 
        
        // 비동기 네트워크 요청을 모방 
        @는 등록 
        workingGroup.enter () 
        workingQueue.async { 
            스레드를. SLEEP이 (forTimeInterval :. 1) 
            인쇄 ( "포트 데이터 요청이 완료") 
            // 착수 
            workingGroup.leave을 () 
        } 
        
        // 비동기 네트워크 요청 B의 모방 
        @는 등록 
        workingGroup.enter () 
        workingQueue.async { 
            에 Thread.sleep (forTimeInterval :. 1) 
            인쇄 ( "포트 B의 데이터 요청 완료") 
            // 착수
            workingGroup.leave () 
        } 
        
        인쇄 ( "나는 대부분의 인쇄 실행에 비동기 작업 후에 시작입니다") 
        
        을 마친 그룹의 작업을 예약 // 
        workingGroup.notify (대기열 : workingQueue) { 
            인쇄 ( "A와 인터페이스를 B 인터페이스 데이터 요청!) "2 데이터 인터페이스를 병합하기 시작 완료된 
        }

 

추천

출처www.cnblogs.com/hualuoshuijia/p/11699742.html