Операция подкласса "основной" метод не вызывается при выполнении OperationQueue? - PullRequest
0 голосов
/ 08 ноября 2018

Я создал подкласс «MyOperation», унаследованный от базового класса «Operation». Я добавил функцию в «MyOperation», которая вызывается при создании экземпляра класса. Однако «главный» метод не вызывается при создании класса операции и его добавлении в очередь операций.

class MyOperation: Operation {

let iterations:Int
let tag:String

init(iterations:Int, tag:String) {
    self.iterations = iterations
    self.tag = tag
}

/**
 When Operation queue begins execution it calls the main method without parameters, so any parameters needed should be passed through initializer.
 **/

override func main() {
    performCalculation()
}

func performCalculation(){
    let start = CFAbsoluteTimeGetCurrent()
    for _ in 0..<iterations {

        self.doCalculations()
    }
    let end = CFAbsoluteTimeGetCurrent()
    print("time for \(tag):\(end-start)")
}

func doCalculations() {

    let x = 100
    let y = x*x
    let _ = y/x
}

}

Я вызываю класс MyOperation из ViewDidLoad в viewcontroller.

override func viewDidLoad() {
    super.viewDidLoad()
   createOperationQueuewithMyOperationClass()
}

func createOperationQueuewithMyOperationClass(){


    let operationQueue = OperationQueue()
    operationQueue.addOperation {
        MyOperation(iterations: 10000000, tag: "Operation-1")
    }

    operationQueue.addOperation {
      MyOperation(iterations: 1000, tag: "Operation-2")
    }

    operationQueue.addOperation {
      MyOperation(iterations: 100000, tag: "Operation-3")
    }
}

1 Ответ

0 голосов
/ 08 ноября 2018

Вы используете неправильный addOperation. Тот, который у вас есть, просто добавляет блочную операцию в очередь, а блок создает операцию и ничего с ней не делает. Вы хотите это:

operationQueue.addOperation(MyOperation(iterations: 100000, tag: "Operation-3"))

Обратите внимание на отсутствие скобок { ... } и вместо них скобок.

Вы звоните addOperation(() -> Void) вместо addOperation(Operation)

...