首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作子类"main“方法在OperationQueue执行时不被调用?

操作子类"main“方法在OperationQueue执行时不被调用?
EN

Stack Overflow用户
提问于 2018-11-08 10:20:08
回答 1查看 432关注 0票数 1

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

代码语言:javascript
复制
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类。

代码语言:javascript
复制
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")
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-08 13:09:12

您使用了错误的addOperation。您只需将一个块操作添加到队列中,该块将创建该操作,并对其不做任何操作。你想要这个

代码语言:javascript
复制
operationQueue.addOperation(MyOperation(iterations: 100000, tag: "Operation-3"))

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

你打电话给addOperation(() -> Void)而不是addOperation(Operation)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53205690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档