gpt4 book ai didi

ios - OperationQueue 执行时未调用操作子类 "main"方法?

转载 作者:行者123 更新时间:2023-11-28 07:35:45 29 4
gpt4 key购买 nike

我创建了一个继承自基类“Operation”的子类“MyOperation”。我在“MyOperation”中添加了一个函数,该函数在类实例化时被调用。但是,当创建操作类并将其添加到操作队列时,不会调用“main”方法。

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
}

}

我正在从 View Controller 的 ViewDidLoad 调用 MyOperation 类。

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")
}
}

最佳答案

您使用了错误的 addOperation。您所拥有的只是将一个 block 操作添加到队列中,而该 block 正在创建该操作并且不对其进行任何操作。你想要这个:

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

请注意缺少大括号 { ... } 和圆括号。

您正在调用 addOperation(() -> Void)而不是 addOperation(Operation)

关于ios - OperationQueue 执行时未调用操作子类 "main"方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53205690/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com