2013-03-28 70 views
0

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

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

}]; 

这个问题似乎是,虽然“generatingThumbnailMessageShow”的方法似乎仍然在“loadAllEffects”消息结束后获得被称为“loadAllEffects”方法之前。仅当第一种方法完成时调用“loadAllEffects”方法的最佳方法是什么?

+0

请问'generatingThumbnailMessageShow'在不同的线程上运行? – holex 2013-03-28 09:53:34

回答

3

问题是[self loadAllEffects]在主线程上运行并阻止了用户界面。在程序控制返回到主循环之后,对用户界面的更改才可见。

你要的[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]; 
     }) 
    }) 

}]; 
+0

嗨,这工作完美谢谢你的帮助。我会接受答案。 – ORStudios 2013-03-28 09:59:42

+0

@IconicDigital:不客气! – 2013-03-28 10:09:03