Вопросы с тегом «grand-central-dispatch»

Grand Central Dispatch (GCD) предоставляет простой и надежный механизм для параллельных и асинхронных операций, прежде всего в операционных системах Apple (например, iOS, macOS, watchOS и tvOS), но также во FreeBSD и MidnightBSD.


24
dispatch_after - GCD в Swift?
Я прошел iBook от Apple, и не мог найти его определение: Может кто-нибудь объяснить структуру dispatch_after? dispatch_after(<#when: dispatch_time_t#>, <#queue: dispatch_queue_t?#>, <#block: dispatch_block_t?#>)

8
NSOperation vs Grand Central Dispatch
Я изучаю параллельное программирование для iOS. До сих пор я читал о NSOperation/NSOperationQueue и GCD. Каковы причины использования NSOperationQueueснова GCDи наоборот? Звучит как и то, GCDи другое, NSOperationQueueабстрагируясь от явного создания NSThreadsпользователя. Однако связь между этими двумя подходами мне не ясна, поэтому любые отзывы приветствуются!

13
Как мне написать dispatch_after GCD в Swift 3, 4 и 5?
В 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 }) Но, похоже, это больше не компилируется со времен Swift 3. Какой предпочтительный способ написать это в современном Swift?


10
Создать синглтон с помощью dispatch_once GCD в Objective-C
Если вы можете ориентироваться на iOS 4.0 или выше Используя GCD, это лучший способ создать синглтон в Objective-C (потокобезопасный)? + (instancetype)sharedInstance { static dispatch_once_t once; static id sharedInstance; dispatch_once(&once, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; }

4
GCD для выполнения задачи в главном потоке
У меня есть обратный вызов, который может прийти из любого потока. Когда я получаю этот обратный вызов, я хотел бы выполнить определенную задачу в главном потоке. Нужно ли проверять, нахожусь ли я уже в главном потоке - или есть какой-либо штраф, если не выполнить эту проверку до вызова кода ниже? …

6
Как я могу отправить dispatch_sync, dispatch_async, dispatch_after и т. Д. В Swift 3, Swift 4 и далее?
У меня есть много кода в проектах 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 = …

9
В Swift как вызвать метод с параметрами в основном потоке GCD?
В моем приложении у меня есть функция, которая создает NSRURLSession и отправляет NSURLRequest, используя sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error) В блоке завершения для этой задачи мне нужно выполнить некоторые вычисления, которые добавляют UIImage к вызывающему viewcontroller. У меня есть функция под названием func displayQRCode(receiveAddr, withAmountInBTC:amountBTC) это делает вычисление добавления UIImage. …

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 …

13
Как мне ждать завершения асинхронно отправленного блока?
Я тестирую некоторый код, который выполняет асинхронную обработку с использованием Grand Central Dispatch. Тестовый код выглядит так: [object runSomeLongOperationAndDo:^{ STAssert… }]; Тесты должны ждать окончания операции. Мое текущее решение выглядит так: __block BOOL finished = NO; [object runSomeLongOperationAndDo:^{ STAssert… finished = YES; }]; while (!finished); Что выглядит немного грубо, знаете …

8
Дождитесь окончания выполнения цикла swift for loop с асинхронными сетевыми запросами
Я хотел бы, чтобы цикл in отправлял кучу сетевых запросов в 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 …

6
iPhone - главная тема Grand Central Dispatch
Я успешно использовал грандиозную центральную диспетчеризацию в своих приложениях, но мне было интересно, каково реальное преимущество использования чего-то подобного: 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. У меня есть некоторые проблемы, и я надеюсь, что кто-нибудь ответит мне четко и по существу. Я читаю, что последовательные очереди создаются и используются для выполнения задач одну за другой. Однако что произойдет, если: Я создаю последовательную …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.