0

我有一段代码首先调用了一个生成大量缩略图的方法,因此它会减慢设备大约一秒钟的速度。我希望在调用第一个方法之前运行一个生成“加载消息”的方法,然后在第一个方法完成时将其删除。

[picker dismissViewControllerAnimated:YES completion:^{
    NSLog(@"Loading");
    [self generatingThumbnailMessageShow];
    [self loadAllEffects];

}];

问题似乎是,虽然“generatingThumbnailMessageShow”方法在“loadAllEffects”方法之前,但它似乎仍然在“loadAllEffects”消息完成后被调用。只有当第一个方法完成时才调用“loadAllEffects”方法的最佳方法是什么?

4

1 回答 1

3

问题是[self loadAllEffects]在主线程上运行并阻塞 UI。对 UI 的更改仅在程序控制返回到主运行循环后才可见。

您必须将执行[self generatingThumbnailMessageShow];移至后台线程,例如

[picker dismissViewControllerAnimated:YES completion:^{
    NSLog(@"Loading");
    // Show "loading" message (must be done on main thread)
    [self generatingThumbnailMessageShow];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // perform long running task on background thread
        [self loadAllEffects];
        dispatch_sync(dispatch_get_main_queue(), ^{
            // Hide "loading" message (must be done on main thread again).
            [self generatingThumbnailMessageHide];
        })
    })

}];
于 2013-03-28T09:53:07.420 回答