优化presentModalViewController的加载时间:

时间:2009-05-06 17:15:11

标签: iphone

在我的NiB中,我有几个View控制器。当应用程序启动时,将调用所有相应的ViewDidLoad()调用。

在ViewControllerA中,我有ViewA,它包含一张包含100张图片的UiScrollView。在ViewdidLoad中初始化这些图片。所以在应用程序发布时,所有图片都是初学者。

在我的主菜单视图控制器中,我有一个按钮,按下时调用presentModalViewController:ViewControllerA

这个电话需要20秒。

我认为ViewDidload中的预加载会优化这一点。但是,一旦呼叫返回并被召回(第二次启动这个VC,它真的很快和即时)。

那是什么导致了这个?为什么第一次调用presentModalViewController需要这么长时间。在内部,它是否试图安排所有图像?有什么办法优化这个?如果没有,最好的方式是显示UiActivityIndi​​cator

先谢谢你

2 个答案:

答案 0 :(得分:1)

这对评论来说太长了。

我首先会使用UITableView来查看它是否适用。

如果它是完全全屏的,那么您可以将UITableView设置为纵向,但可以在其单元格中旋转图片。这与景观相同。

如果滚动视图未填满屏幕,您仍然可以尝试使用视图转换UITableView来旋转它。

然后你的下一个方法应该是在滚动视图中放置占位符,懒惰地加载图像。如果所有图像的大小相同,那么这非常简单,只需保留有限数量的这些单元格即可优化内存。

另一个疯狂的想法:让它成为一个UIWebView。这将为你做所有的懒惰。

答案 1 :(得分:0)

首先,在-viewDidLoad方法中放入一些NSLog()语句。当你认为它们时,它们可能没有被调用。 UIViewControllers是懒惰的。在有人引用他们的观点之前,他们实际上并没有加载他们的NIB。

如果通过“调用所有相应的ViewDidLoad()调用,”你的意思是你实际上是手动调用[viewController viewDidLoad],那将无法工作,也不会这样做。这是一个委托方法,只能由系统调用。

你可以,但不应该通过调用[viewController视图]解决所有这些问题。这将迫使负载,但这几乎总是错误的答案。

图片有多大?你真的有记忆可以一直保持100个吗?你可以根据需要加载这些图片吗?这些照片的形状是什么? UITableView可以为您做很多工作吗?如果他们在网格中,你可以为每个UITableViewCell显示4-5张图片,然后你就可以获得所有UITableView的优化。