Sobes.tech
Junior — Middle

Може ли да прекъснете изпълнението на задача, стартирана чрез NSOperation?

sobes.tech AI

Отговор от AI

Да, възможно е да се опита да се прекрати задача, стартирана чрез NSOperation, като се извика методът cancel() върху операцията. Важно е обаче да се разбере, че извикването на cancel() не спира операцията мигновено — то само задава флаг за отменяне. Вашата задача трябва периодично да проверява свойството isCancelled и да завършва правилно, ако операцията е отменена.

Пример:

class MyOperation: Operation {
    override func main() {
        for i in 0..<1000 {
            if isCancelled {
                print("Операцията е отменена")
                return
            }
            // Изпълнение на задачата
            print(i)
        }
    }
}

let operation = MyOperation()
operationQueue.addOperation(operation)

// По-късно
operation.cancel() // Опит за отменяне на операцията

Така, отменянето е кооперативно действие, и операцията трябва да проверява флага за отменяне, за да прекъсне правилно.