【问题标题】:Kill all task started by object : Objective C杀死对象启动的所有任务:Objective C
【发布时间】:2012-08-01 13:01:44
【问题描述】:

我有课。我正在其中运行一些后台任务(使用 performselectorInBackground),当这些功能最终完成时,我将添加一个子视图。但在某些情况下,我会在完成后台任务之前释放并设置 nil 类的对象。
事件然后这些后台任务没有被杀死并通过添加子视图来更新我的 UI。

我如何杀死对象启动的所有任务。

【问题讨论】:

    标签: objective-c ipad background


    【解决方案1】:

    performSelectorInBackground 是一种设置并忘记的方法。你不能取消它们。但是,您有两个选择。您可以转到dispatch_* 键入命令。或者,您可以在后台循环中使用布尔值来检查它是否应该自行取消。然后,当您需要取消它时,只需将该 bool 设置为 YES,然后在下一个循环中您可以返回或类似的内容。

    【讨论】:

    • NSOperationQueue 是取消任务的更好选择。只需让对象创建一个所有操作都添加到的队列,并在应该全部取消时调用[myQueue cancelAllOperations];。然而,已经运行的操作必须检查它们是否使用[self isCancelled] 取消,以便在它们开始后停止执行。
    • 是的,大卫是对的。忘记了 NSOperationQueue。它通常超出了我需要的范围,但它绝对比惰性布尔方法更好。
    • 但在我的情况下,队列中没有其他操作,我可能只有一个在后台运行的操作。我想取消我当前正在运行的任务。我可以使用 dispatch_* 杀死正在运行的任务吗
    • 是的,您可以使用调度,但它要复杂得多。如果您只有一个函数在后台运行,我建议您使用非常简单的布尔方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    相关资源
    最近更新 更多