2013-10-02 58 views
0

我有一个类A中的功能来显示按钮按下时的视图控制器B.但我发现视图控制器B的初始函数(也包含viewdidload和viewwillapear)需要几秒钟。如何减少初始化视图控制器的时间

- (void)showCataloguesBook:(id)sender 
    { 
     UIButton *btn = (UIButton *)sender; 
     CataloguesCoverView *coverView = (CataloguesCoverView *)[_coversArray objectAtIndex:btn.tag]; 
     NSString *bookID = [[self.dataArray objectAtIndex:btn.tag] objectForKey:@"bookID"]; 
     PageCurlViewController *viewController = [[PageCurlViewController alloc] initWithNibName:nil bundle:nil]; 
     viewController.defaultSize = coverView.image.size; 
     viewController.bookID = bookID; 
     [self presentViewController:viewController animated:YES completion:nil]; 
    } 

在视图控制器B的功能包含搜索CoreData,加入subViewController(UIPageViewController)等等,我不能更好地完善它。那么,我可以做些什么来缩短按下按钮和显示视图控制器B之间的等待时间?

+2

不要做重要的东西,如搜索,在viewWillAppear中获取数据。让视图加载,然后使用GCD在后台获取数据并显示一些加载屏幕。另一种方法是让你提取数据,搜索数据代码的效率。 –

+0

是的,请向我们展示如何获取核心数据数据。 – HAS

+0

谢谢大家!我真的明白你的意思,对我而言,尽管我需要改变和改进我的代码,但我现在无法做很多改变。所以我只是在A班里玩一个窍门,我加了一个等待动画! – fisher

回答

1

缓存。

这样做的一个非常简单的方案是为viewController B设置一个属性,然后在viewController A的viewDidLoad中实例化它并将其存储在属性中,然后在需要使用它的时候它就会准备好不需要做任何处理。

您应该采取预防措施,并确保摆脱didReceiveMemoryWarning中的viewController。

如果您需要做更多尝试缓存NSCache中的每个可能的选项,它将自动管理内存。如果想要变得复杂,可以使用NSOperationQueue和NSOperation在应用程序加载时在后台线程中运行所有这些。

您还可以制作一个较小的查询以保存一些信息并立即显示,然后执行较大的查询以稍后获取更多信息。

有很多方法可以做到这一点,大多数情况下你只需要提出一个聪明的方式来存储一些数据,然后才能呈现。

+0

感谢您提供详细的解决方案。 – fisher

相关问题