使用MBProgressHUD 不能立刻显示出来,到下个界面才显示

记录今天开发使用MBProgressHUD遇到的一个小坑:

在push到下一个界面前做了一些耗时操作,结果用[MBProgressHUD show]时show不出来,到下一个界面才会出现转圈。

- (void)showHUD{
    [MBProgressHUD show];
}

pragma mark - 下一步

先记录一下错误的写法
- (void)nextStepClcik
{
//dispatch_async(dispatch_get_main_queue(), ^{
// [MBProgressHUD show];
//});//这样不管用
[self performSelectorInBackground:@selector(showHUD) withObject:nil];

  for (int i=0; i<100000; i++) {
    //耗时操作
  }

  [MBProgressHUD hideHUD];
   NextController *next= [[NextController alloc]init];
   [self.navigationController pushViewController: next animated:YES];

}

这样写进入下个界面载返回上一个界面时崩溃报错:

This application is modifying the autolayout engine from a background
thread, which can lead to engine corruption and weird crashes.  This 
will cause an exception in a future release.
此应用程序正在从后台线程修改自动布局引擎,这可能导致引擎损坏和奇怪的崩溃。 这将导致在将来版本中的异常。

最后用GCD解决的:

[self showHUD];
 dispatch_async(dispatch_get_global_queue(0, 0), ^{
     for (int i=0; i<100000; i++) {
      //耗时操作
    }
    dispatch_async(dispatch_get_main_queue(), ^{
        
        [MBProgressHUD hideHUD];
        NextController *next= [[NextController alloc]init];
   [self.navigationController pushViewController: next animated:YES];
    });
});

参考:http://blog.csdn.net/tzshlyt/article/details/51880484

你可能感兴趣的:(使用MBProgressHUD 不能立刻显示出来,到下个界面才显示)