«grand-central-dispatch» 태그된 질문

GCD (Grand Central Dispatch)는 주로 Apple 운영 체제 (예 : iOS, macOS, watchOS 및 tvOS)뿐만 아니라 FreeBSD 및 MidnightBSD에서도 동시 및 비동기 작업을위한 간단하고 강력한 메커니즘을 제공합니다.



8
NSOperation 및 그랜드 센트럴 디스패치
iOS의 동시 프로그래밍에 대해 배우고 있습니다. 지금까지 NSOperation/NSOperationQueue 및 에 대해 읽었습니다 GCD. 이상 을 사용하는 이유는 무엇입니까 ?NSOperationQueueGCD 모두 같은 소리 GCD와 NSOperationQueue멀리 추상적의 명시적인 생성 NSThreads사용자로부터. 그러나 두 가지 접근 방식의 관계가 명확하지 않으므로 의견을 보내주십시오!

13
Swift 3, 4 및 5에서 dispatch_after GCD를 작성하는 방법
Swift 2에서는 dispatch_after그랜드 센트럴 디스패치를 ​​사용하여 작업을 지연시키는 데 사용할 수있었습니다 . var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))) dispatch_after(dispatchTime, dispatch_get_main_queue(), { // your function here }) 그러나 이것은 더 이상 스위프트 3 이후로 컴파일되지 않는 것 같습니다. 현대 스위프트에서 이것을 작성하는 선호되는 방법은 무엇입니까?



4
메인 스레드에서 작업을 수행하는 GCD
어떤 스레드에서나 콜백이 있습니다. 이 콜백을 받으면 메인 스레드에서 특정 작업을 수행하고 싶습니다. 이미 메인 스레드에 있는지 확인해야합니까, 아니면 아래 코드를 호출하기 전에이 확인을 수행하지 않으면 페널티가 있습니까? dispatch_async(dispatch_get_main_queue(), ^{ // do work here });

6
Swift 3, Swift 4 이상에서 dispatch_sync, dispatch_async, dispatch_after 등을 어떻게합니까?
Swift 2.x (또는 1.x) 프로젝트에는 다음과 같은 코드가 많이 있습니다. // Move to a background thread to do some long running work dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { let image = self.loadOrGenerateAnImage() // Bounce back to the main thread to update the UI dispatch_async(dispatch_get_main_queue()) { self.imageView.image = image } } 또는 다음과 같은 …

9
Swift에서 GCD 메인 스레드에서 매개 변수가있는 메소드를 호출하는 방법은 무엇입니까?
내 응용 프로그램에는 NSRURLSession을 만들고 NSURLRequest를 사용하여 보내는 기능이 있습니다. sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error) 이 작업의 완료 블록에서 UIView를 호출하는 뷰 컨트롤러에 추가하는 계산을 수행해야합니다. 나는 func라는 기능이 있습니다 func displayQRCode(receiveAddr, withAmountInBTC:amountBTC) UIImage-adding 계산을 수행합니다. 완료 블록 내에서 뷰 추가 코드를 실행하려고하면 Xcode에서 백그라운드 프로세스 중에 레이아웃 엔진을 사용할 …

10
다른 블록을 시작하기 전에 두 개의 비동기 블록이 실행될 때까지 대기
GCD를 사용할 때 다음 실행 단계로 넘어 가기 전에 두 개의 비동기 블록이 실행될 때까지 기다립니다. 가장 좋은 방법은 무엇입니까? 우리는 다음을 시도했지만 작동하지 않는 것 같습니다. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block1 }); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { // block2 }); // wait until both the block1 and block2 are …

13
비동기 적으로 디스패치 된 블록이 완료 될 때까지 어떻게 대기합니까?
Grand Central Dispatch를 사용하여 비동기 처리를 수행하는 일부 코드를 테스트하고 있습니다. 테스트 코드는 다음과 같습니다. [object runSomeLongOperationAndDo:^{ STAssert… }]; 테스트는 작업이 완료 될 때까지 기다려야합니다. 내 현재 솔루션은 다음과 같습니다. __block BOOL finished = NO; [object runSomeLongOperationAndDo:^{ STAssert… finished = YES; }]; while (!finished); 어느 것이 조금 조잡 해 보이는지, …

8
비동기 네트워크 요청으로 신속한 루프 실행이 완료 될 때까지 기다립니다.
for 루프에서 많은 네트워크 요청을 firebase로 보내고 메소드가 실행을 마치면 데이터를 새보기 컨트롤러에 전달하고 싶습니다. 내 코드는 다음과 같습니다. var datesArray = [String: AnyObject]() for key in locationsArray { let ref = Firebase(url: "http://myfirebase.com/" + "\(key.0)") ref.observeSingleEventOfType(.Value, withBlock: { snapshot in datesArray["\(key.0)"] = snapshot.value }) } // Segue to new …

6
iPhone-그랜드 센트럴 디스패치 메인 스레드
내 앱에서 성공적으로 중앙 집중식 디스패치를 ​​사용했지만 다음과 같은 것을 사용하면 실제로 어떤 이점이 있는지 궁금합니다. dispatch_async(dispatch_get_main_queue(), ^{ ... do stuff 또는 dispatch_sync(dispatch_get_main_queue(), ^{ ... do stuff 두 가지 경우 모두 메인 스레드에서 실행될 블록을 실행하는 것입니다. 앱이 실행되는 정확한 위치이며로드를 줄이는 데 도움이되지 않습니다. 첫 번째 경우 블록이 실행될 …

3
직렬 대기열에서 dispatch_async와 dispatch_sync의 차이점은 무엇입니까?
다음과 같이 직렬 대기열을 만들었습니다. dispatch_queue_t _serialQueue = dispatch_queue_create("com.example.name", DISPATCH_QUEUE_SERIAL); dispatch_async이처럼 호출 의 차이점은 무엇입니까 dispatch_async(_serialQueue, ^{ /* TASK 1 */ }); dispatch_async(_serialQueue, ^{ /* TASK 2 */ }); 그리고 dispatch_sync이 일련 큐에 다음과 같이이라고? dispatch_sync(_serialQueue, ^{ /* TASK 1 */ }); dispatch_sync(_serialQueue, ^{ /* TASK 2 */ }); 내 …

6
GCD의 동시 대기열과 직렬 대기열
GCD의 동시 및 직렬 대기열을 완전히 이해하기 위해 고군분투하고 있습니다. 나는 몇 가지 문제가 있으며 누군가가 그 시점에서 명확하게 대답 할 수 있기를 바랍니다. 작업을 차례로 실행하기 위해 직렬 대기열이 생성되고 사용된다는 것을 읽고 있습니다. 그러나 다음과 같은 경우에는 어떻게됩니까? 직렬 대기열을 만듭니다. I 사용 dispatch_async디스패치 (I 방금 만든 큐에 …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.