在我的NiB中,我有几个View控制器。当应用程序启动时,将调用所有相应的ViewDidLoad()调用。
在ViewControllerA中,我有ViewA,它包含一张包含100张图片的UiScrollView。在ViewdidLoad中初始化这些图片。所以在应用程序发布时,所有图片都是初学者。在我的主菜单视图控制器中,我有一个按钮,按下时调用presentModalViewController:ViewControllerA
这个电话需要20秒。
我认为ViewDidload中的预加载会优化这一点。但是,一旦呼叫返回并被召回(第二次启动这个VC,它真的很快和即时)。
那是什么导致了这个?为什么第一次调用presentModalViewController需要这么长时间。在内部,它是否试图安排所有图像?有什么办法优化这个?如果没有,最好的方式是显示UiActivityIndicator
先谢谢你
答案 0 :(得分:1)
这对评论来说太长了。
我首先会使用UITableView来查看它是否适用。
如果它是完全全屏的,那么您可以将UITableView设置为纵向,但可以在其单元格中旋转图片。这与景观相同。
如果滚动视图未填满屏幕,您仍然可以尝试使用视图转换UITableView来旋转它。
然后你的下一个方法应该是在滚动视图中放置占位符,懒惰地加载图像。如果所有图像的大小相同,那么这非常简单,只需保留有限数量的这些单元格即可优化内存。
另一个疯狂的想法:让它成为一个UIWebView。这将为你做所有的懒惰。
答案 1 :(得分:0)
首先,在-viewDidLoad方法中放入一些NSLog()语句。当你认为它们时,它们可能没有被调用。 UIViewControllers是懒惰的。在有人引用他们的观点之前,他们实际上并没有加载他们的NIB。
如果通过“调用所有相应的ViewDidLoad()调用,”你的意思是你实际上是手动调用[viewController viewDidLoad],那将无法工作,也不会这样做。这是一个委托方法,只能由系统调用。
你可以,但不应该通过调用[viewController视图]解决所有这些问题。这将迫使负载,但这几乎总是错误的答案。
图片有多大?你真的有记忆可以一直保持100个吗?你可以根据需要加载这些图片吗?这些照片的形状是什么? UITableView可以为您做很多工作吗?如果他们在网格中,你可以为每个UITableViewCell显示4-5张图片,然后你就可以获得所有UITableView的优化。