是否可以在不访问它的情况下取消 nsoperation?

Is it possible to cancel nsoperation without access to it?

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

您是否有权访问添加了这些操作的 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()
        }
    }

请注意,即使您可以访问 NSOperation 或其队列,"cancel" 并不意味着 "make go away." 它只意味着 "don't start if it hasn't been started yet, and if it has been started, set the cancel flag." 如果 NSOperation 不检查它的取消标志,那么它仍然不会终止。没有办法做你想做的事,这是故意的。强行终止操作会使程序处于未定义状态。

听起来你要么是库中有错误,要么是你使用库的方式有错误(我怀疑后者先于前者,但这取决于库)。您将需要追踪并解决该错误。