Я знаком с использованием AsyncTask в Android: создайте подкласс, вызовите выполнение в экземпляре подкласса, а onPostExecute вызывается в потоке пользовательского интерфейса или в главном потоке. Что эквивалентно в быстром?Grand Central Dispatch (GCD) in swift
ответ
Это решает большинство моих требований асинхронными в Swift:
public func background(function: @escaping() -> Void) {
DispatchQueue.global().async(execute: function)
}
public func main(function: @escaping() -> Void) {
DispatchQueue.main.async(execute: function)
}
Затем используйте как:
background {
// I'm in the background
main {
// I'm back on Main
}
}
Например:
background { [weak self] in
let result = longOperationToFetchData()
main {
self?.data = result.data
self?.reloadTableView()
}
}
Можно ли привести пример? –
@ J.Arji супер поздно, извините, но добавил быстрый пример и обновленный ответ для последнего swift – Logan
Я думаю, используя NSOperationQueue более элегантный и просто. Вы можете создать очередь:
var queue = NSOperationQueue()
И создать задачу:
let operation = NSBlockOperation {() -> Void in
// Perform your task
}
После этого поставить задачу в очередь
queue.addOperation(operation)
То есть. В случае, если вы хотите выполнить UI связанных задач, используя этот блок кода:
NSOperationQueue.mainQueue().addOperationWithBlock {() -> Void in
// UI related task
}
NSOperationQueue предлагает простой способ установить зависимость между задачами. Например, у вас есть 4 задачи, op1, op2, op3, op4. И вы хотите, чтобы op1 нужно сделать, прежде чем op2, то вы можете написать так:
op2.addDependency(op1)
Тогда op2 будет уволен после того, как op1 сделано. Поскольку нет зависимости от op3 и op4, это можно сделать до/или после op2
ваш ответ приятный, но он работает только на платформе apple ... libdispatch в настоящее время доступна на всех платформах Darwin, на linux и т. Д. и, к счастью, будет доступен как «стандартная» часть Swift 3.0 (NSOperation как часть фонда Swift 3.0 Foundation еще не реализована). На платформе Apple +1 для вас! – user3441734
@ J.Arji На самом деле, «NSOperation» с _block_ и «NSOperation» является самым близким, что вы можете подражать «AsyncTask» на Android. блоки, отправленные в очереди отправки, весьма схожи - но это средство также служит для четкого определения ограничений параллелизма и QoS. И _concurrent_ 'NSOperations', представленный в NSOperationQueue, является чем-то совершенно другим - они выполняют _asynchronous_ задачи в каком-то частном контексте выполнения, а не в самой очереди. – CouchDeveloper
- 1. Grand Central Dispatch Параллелизм
- 2. Основа веб-дизайна Grand Central Dispatch (GCD)?
- 3. Grand Central Dispatch (GCD) с CoreData
- 4. Grand Central Dispatch (GCD) и асинхронные API
- 5. Swift - Grand Central Dispatch vs Blocks/Closures
- 6. Grand Central Dispatch with Swift: использование неразрешенного идентификатора GCD
- 7. вызов функции Grand Central Dispatch
- 8. Grand Central Dispatch vs NSThreads?
- 9. Grand Central Dispatch Growing Memory
- 10. Как объявить Grand Central Dispatch
- 11. Таймер с Grand Central Dispatch
- 12. iOS8 Swift TableView LoadingOverlay Grand Central Dispatch
- 13. Grand Central Dispatch Multiple DispatchGroups
- 14. Многопоточность и Grand Central Dispatch на iOS
- 15. Получение OSSpinLockLock при использовании Grand Central Dispatch (GCD)
- 16. Grand Central Dispatch эквивалент для omp_get_thread_num
- 17. перерыв Grand Central Dispatch запустить
- 18. Grand Central Dispatch против Cilk ++
- 19. с помощью dispatch_sync в Grand Central Dispatch
- 20. Использование Grand Central Dispatch с бесконечными циклами?
- 21. Как получить массив из Grand Central Dispatch?
- 22. swift: Grand-Central-Dispatch, но код выполнен на mainthread?
- 23. Grand Central Dispatch async vs sync
- 24. Кодовые блоки с Grand Central Dispatch
- 25. Быстрый рост кучи с Grand Central Dispatch
- 26. Проблема с Grand Central Dispatch с использованием Swift
- 27. Grand Central Dispatch в Swift работает только первый запуск
- 28. Использование Grand Central Dispatch с GKLeaderboard
- 29. Как создать тупик в Grand Central Dispatch?
- 30. Timer Not Repeating (Grand Central Dispatch)
Re: GCD не является «наибольшим общим делителем» :) –
, так как * я * не знаком с Android, попробуйте объясните, что вы хотите достичь, не слишком много перекрестных ссылок! – luk2302
Apple предоставляет «Руководство по программированию параллелизма» ... –