在这种情况下,在主线程上执行长操作是否可以

时间:2015-06-02 13:48:33

标签: multithreading swift synchronization

我正在使用Parse访问应用程序数据,我的目标是检查用户是否已经应用。

func buttonApplyClicked() {
    if (userAlreadyApplied()==false) {
        // gather data and register the user
    }
}

func userAlreadyApplied() {
    // executing on main thread will block
    let applicant = parseQueryInstance.getFirstObject()
    return applicant != nil
    // or
    parseQueryInstance.getFirstObjectInBackgroundWithBlock() {
        // check data and return result
    }
}

因此,如果使用异步调用,我将失去主线程,如果我使用同步调用,则会收到警告,即我执行长操作。

我想它可以在主线程上执行此操作,我也认为它也可以在主线程中执行注册操作,我觉得好吗?

2 个答案:

答案 0 :(得分:0)

  

我想可以在主线程上执行这个[长时间运行]操作

在Cocoa应用程序中永远不会这样。你绝不能阻止主线程。

Cocoa开发通常需要异步操作。您必须处理这样一个事实,即您不会立即获得答案,并且必须在得到答案时进行更新。您还必须处理您的请求可能失败的事实。不能假设网络快速或可用。

答案 1 :(得分:0)

在所有情况下,不建议执行长操作。您应该在另一个线程中执行,然后使用委托模式或完成处理程序再次调用主线程。在此期间,如果操作需要时间并且必须在另一个操作之前完成,则应显示等待消息。