0

我正在构建我的第一个项目,它是 iPad 的交互式电子书应用程序

我从 XCode 的 Single View App 模板开始

到目前为止,该项目主要是UIImageViews和MPMovieController视频之间的一系列块动画过渡,到目前为止非常连续

一切都在单个视图下的单个视图中编码 - 图像视图使用 alpha 动画淡入淡出

我开始遇到内存问题。我使用了内存工具,发现除了一些在运行时实例化的视频之外,大多数东西都在开始时加载到内存中(来自 InterfaceBuilder 的图像)

我的问题是 - 我应该如何重新组织我的代码以更好地利用内存?我应该在一个视图控制器下分成不同的视图,还是有多个视图控制器?

哪个可能是最直接实施的?

4

4 回答 4

0

我认为您需要使用多个视图控制器并将代码分隔在小的分隔视图和控制您的应用程序流的对象中。

于 2013-04-28T18:27:38.430 回答
0

图像非常占用内存。所以:

  • 在您真正需要它(用于显示)之前不要加载图像。完成后(图像视图不再可见),释放它(通过将该图像视图的图像设置为零)。不要将图像保存在数组或类似的东西中。不要在 nib 中创建预先加载有图像的图像视图。

  • 当您确实需要显示图像时,请使用imageWithContentsOfFile:, 而不是imageNamed:. 因此,您可以防止缓存图像。

  • 处理大于显示尺寸的图像会浪费内存。如果这些图像很大,如果以显示所需的实际大小加载图像,则可以预先节省大量内存。这很容易通过 Image IO 框架和CGImageSourceCreateThumbnailAtIndex.

于 2013-04-28T18:28:01.950 回答
0

一方面,最好有多个视图等等......但是重写你工作的代码是一件痛苦的事情(除非它是绝对必要的)。

在我看来,如果您在内存中没有任何不必要的东西(即,当您从屏幕上查看视图时,您会释放它使用的内存),您不需要做任何事情。

毕竟,即使您按照应有的方式拆分代码,如果您的内存管理良好,它也会占用完全相同的内存。

于 2013-04-28T18:28:21.137 回答
0

您应该能够使用单个视图控制器执行此操作:

  • 从代码中延迟加载图像。保留一组图像名称而不是图像本身,并在您需要它们之前加载它们。
  • 确保您的图像不大于所需大小。
  • 回收您的图像视图。如果用户一次不会看到两个以上的图像视图(包括转换中的 from 和 to),您应该只有两个图像视图。
  • 不用担心图片是否被缓存;iOS 的缓存旨在在压力下释放其内容。也就是说,不要实现自己的缓存系统。您可能无法在压力下正确发布图像。如果需要缓存,请使用NSCache.
于 2013-04-28T18:33:50.477 回答