是否有可能取消nsoperation而无法访问它?

时间:2016-03-09 14:18:36

标签: ios nsoperation

我需要使用一个没有正常工作的库。在调用某个方法后,它会创建一些NSOperation,它永远不会完成,最终会出现睡眠状态mach_msg_trap错误,因为我没有这些操作的实例,所以我无法取消它。 是否有可能在没有访问权限的情况下取消它?

2 个答案:

答案 0 :(得分:3)

请注意,即使您有权访问NSOperation或其队列,"取消"并不意味着消失。"它只是意味着如果它还没有启动就不会启动,如果它已经启动,则设置取消标记。"如果NSOperation没有检查其取消标记,那么它仍然不会终止。没有办法做你想做的事情,这是故意的。强制终止操作会使程序处于未定义状态。

听起来你要么在库中有错误,要么就是你如何使用库的错误(我会怀疑后者在前者之前,但它取决于库)。您需要追踪该错误并解决它。

答案 1 :(得分:0)

您是否可以访问添加了这些操作的NSOperationQueue? 如果是,您可以这样访问:

var queue = NSOperationQueue.mainQueue()
    // or
    queue = NSOperationQueue.currentQueue()!

    let operations = queue.operations
    for operation in operations{
        if operation.name == "name of operation if you know it" {

            operation.cancel()
        }
    }