逐步加载子视图以提高iOS应用程序性能

逐步加载子视图以提高iOS应用程序性能,ios,performance,uikit,Ios,Performance,Uikit,我正在寻找一种技术,逐步加载UIViewController的内容,使应用程序感觉“更快速”。我在将viewcontroller推入堆栈时注意到了这个问题,在等待它推入时有明显的延迟。UIViewController的视图具有一些具有透明度的复杂子视图。我想知道,如果我在ViewDid出现并“淡入”它们之后创建它们,那么过渡会显得更加平滑 我在苹果的预告片应用程序中注意到了类似的效果。在该应用程序中点击电影时,细节视图将被推入,并在事件发生后加载内容。当然,延迟的部分原因是因为他们在展示之前下载

我正在寻找一种技术,逐步加载UIViewController的内容,使应用程序感觉“更快速”。我在将viewcontroller推入堆栈时注意到了这个问题,在等待它推入时有明显的延迟。UIViewController的视图具有一些具有透明度的复杂子视图。我想知道,如果我在ViewDid出现并“淡入”它们之后创建它们,那么过渡会显得更加平滑

我在苹果的预告片应用程序中注意到了类似的效果。在该应用程序中点击电影时,细节视图将被推入,并在事件发生后加载内容。当然,延迟的部分原因是因为他们在展示之前下载了详细信息,但似乎他们总是会淡出那个大图像,不管它是否已经下载


是否有人在这方面或在总体上改进UIViewController负载方面取得了很大成功。

在您开始进行更改以提高性能之前,请使用工具分析您的应用程序,并找出问题的真正所在。是否在绘制复杂的子视图时使用?是在加载数据吗?知道的唯一方法是测量

没有理由不能按照您的建议执行--让视图控制器创建/加载其主视图,然后添加复杂的子视图。视图控制器可以随意添加和删除子视图。这会让应用程序感觉更快捷吗?它可能——类似于苹果在iOS中内置的默认图像策略,在iOS中,操作系统加载界面的图片,使设备看起来反应灵敏,然后在准备好后替换真实的界面。另一方面,如果用户仍然需要等待创建复杂的子视图,视图才有用,那么查看视图的其余部分可能没有多大帮助


另一种可能性(同样,在测量之后)可能是在用户需要视图之前创建视图。这与iOS应用程序通常用于节省内存和电源的延迟初始化背道而驰,但如果你知道你需要这些视图,并且你可以预期用户活动会在需要之前暂停,那么这可能是提高应用程序明显速度的一个好方法。要让视图控制器创建/加载其视图,只需访问其
视图
属性。

我目前正在实施一种类似于您在第三种可能性中提出的策略。第一次加载viewcontroller时,我将其存储在一个变量中,以便每隔一次需要显示时可以重用它。它有点像一个单例(除非有内存警告时我会释放它)。这会使第一次加载变慢,但随后的加载会立即发生。我为第一批货展示了一个旋转器,以帮助减轻等待。哦,是“s字”。-)请记住,singleton不仅仅是一个共享实例的类,或者一个只实例化一次的类;它是一个防止自身被多次实例化的类。您只需重用视图控制器的一个实例,这很好。这听起来是一个很好的解决方案。对,不是真正的单身汉。