导航到包含ScrollView的ViewController太慢了

时间:2016-01-18 07:55:51

标签: ios objective-c uiviewcontroller uinavigationcontroller

这是从ViewController A推送到ViewController B的方式

UIStoryboard *mainStory = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ListingViewController *listView = [mainStory instantiateViewControllerWithIdentifier:@"listing"];

[self.navigationController pushViewController:listView animated:YES];

我也尝试过使用StoryBoard中的segue

[self performSegueWithIdentifier:@"Associate3" sender:sender];

在开始推送之前,第一次推送到此ViewController冻结(大约4秒),知道VC B在其XIB中包含UIScrollView对象,

这是否发生在任何人身上,谁知道如何解决这个延迟?

修改

我已经评论过所有的网络服务调用方法,没有改变!我认为它是一个分配延迟,我正在使用带有标识符的故事板来推送VC B,但是当我使用分配方法:VC *B = [[VC alloc] init]时,推送到这个视图可以毫不拖延地工作,但是我不会这样做的问题。需要使用分配方法!!

5 个答案:

答案 0 :(得分:2)

终于找到了问题,它是在VC B的标签中使用的自定义字体,只是将它们设置回系统字体而不是Roboto解决了我的问题,我认为系统需要时间来查找具体的字体名称。希望这对其他人有用

答案 1 :(得分:0)

您似乎正在ViewController B的main threadViewWillAppear ViewDidLoad执行一些繁重的操作

评论上述两种方法的完整代码,然后运行验证app中问题的应用程序。

因此,如果经过验证,您必须将繁重的操作从main thread移至background thread

答案 2 :(得分:0)

这可能是因为推送是在不同的线程中执行的。尝试在主线程中推送viewController。即,用

替换您的推送控制器代码
dispatch_async(dispatch_get_main_queue(), ^{
    UIStoryboard *mainStory = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    ListingViewController *listView = [mainStory instantiateViewControllerWithIdentifier:@"listing"];

    [self.navigationController pushViewController:listView animated:YES];
});

答案 3 :(得分:0)

尝试更改ListingViewControllerviewDidLoad方法以调用async

- (void)viewDidLoad {
  [super viewDidLoad];

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
  //move your code here
  // if you need to do something on ui (reload table view e.t.c) - call async in main thread
    dispatch_async(dispatch_get_main_queue(), ^{
      //Your UI code
    });
  });
}

答案 4 :(得分:0)

您可以使用'Instruments-Time Profiler',一个使用Xcode的开发人员工具。它可以检查时间费用。然后,我想你会发现你的问题。