这是从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]
时,推送到这个视图可以毫不拖延地工作,但是我不会这样做的问题。需要使用分配方法!!
答案 0 :(得分:2)
终于找到了问题,它是在VC B的标签中使用的自定义字体,只是将它们设置回系统字体而不是Roboto解决了我的问题,我认为系统需要时间来查找具体的字体名称。希望这对其他人有用
答案 1 :(得分:0)
您似乎正在ViewController B的main thread
或ViewWillAppear
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)
尝试更改ListingViewController
类viewDidLoad
方法以调用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的开发人员工具。它可以检查时间费用。然后,我想你会发现你的问题。