Nano Hash - криптовалюты, майнинг, программирование

Есть идеи отменить функцию посередине? Свифт iOS

Я вызываю сетевую задачу для получения некоторого JSON, когда пользователь выбирает ячейку в UICollectionView. Это asynchronous, поэтому пользовательский интерфейс остается активным, пока данные извлекаются. Разрешение пользователю выбирать другую ячейку в UICollectionView. Я не хочу останавливать это, но мне нужен способ отменить первый вызов функции и вызвать новый метод для выбранной ячейки.

Есть ли способ, возможно, didDeselectItemAt indexPath: отменить любые выполняемые в данный момент задачи?

Я думал разместить модальное представление «пожалуйста, подождите» над пользовательским интерфейсом, которое предотвратило бы второй выбор ячейки, пока функция не вернется. Это мой лучший вариант или есть лучший способ?


  • Если вы используете NSOperationqueue, вы можете отменить. 15.09.2016

Ответы:


1

Вы можете использовать NSOperationQueue для создания и отслеживания асинхронных запросов и отмены их при необходимости.

См. ответы на этот другой вопрос здесь: GCD отменить асинхронный блок?

15.09.2016

2

Поддерживая отдельные потоки с использованием NSOperationQueue, можно управлять задачами в середине выполнения, тогда как GCD не разрешает то же самое, но оба работают для фонового и переднего плана выполнения определенного механизма задач.

  • GCD — это упрощенный способ представления единиц работы, которые будут выполняться одновременно. Вы не планируете эти единицы работы; система позаботится о расписании за вас.

  • NSOperation добавляет немного дополнительных накладных расходов по сравнению с GCD, но вы можете добавить зависимость между различными операциями и повторно использовать, отменять или приостанавливать их.

Образец:

var backgroundQueue = NSOperationQueue()
    backgroundQueue.addOperationWithBlock(){
        println("hello from background")
        NSOperationQueue.mainQueue().addOperationWithBlock(){
            self.theLabel.text = "updated from main thread"
        }
    }

Теперь можно выполнять различные операции при условии NSOperationQueue над backgroundQueue переменной.

15.09.2016
  • +1 за объяснение, почему GCD может быть не лучшим решением здесь. Также см. этот ответ для краткого сравнения NSOperation и GCD: stackoverflow.com/a/10375616/563802 15.09.2016
  • addOperationWithBlock() создает NSOperation, задачу которой нельзя отменить. То есть предлагаемое вами решение не может решить проблему ОП. 13.05.2017

  • 3

    Вы можете отправлять свои сетевые задачи как NSOperations на NSOperationQueue.

    NSOperation имеет метод отмены, а NSOperationQueue — метод cancelAllOperations.

    15.09.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..