【问题标题】:How can I improve UICollectionView efficiency?如何提高 UICollectionView 效率?
【发布时间】:2013-07-03 20:56:51
【问题描述】:

我有一个 iOS 应用程序,其中有一个集合视图,其中最多可以包含几百个单元格。每个单元格中有 5 个视图,4 个 UILabel 和 1 个 UIImageView。当我正常运行应用程序时,每当我滚动几行时,应用程序都会使用荒谬的内存量。就像 3 行大约 5Mb 的内存一样。我尝试删除 cellForItemAtIndexPath 中的所有代码,使集合视图控制器看起来像这样:

    #import "CollectionView.h"

    @implementation CollectionView

    - (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section {
        return 100;
    }

    - (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Story_Cell_Small";
Cell *cell = [cv dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
return cell;
    }

    @end

然而,该应用在滚动时仍会使用大量数据。当我打开单元格的情节提要视图并删除单元格中的所有视图并再次测量我的应用程序在仪器中的内存使用情况时,滚动空单元格时没有内存使用情况。我可以看到这实际上是基于滚动条移动的单元格。

所以关键是单元格中的视图正在使用大量内存而我没有做任何事情接受将它们放在应用程序故事板的单元格中。

我的问题是,我该如何解决这个问题?我做错了什么荒谬的事吗?

【问题讨论】:

  • 3 行是多少个单元格?记忆是您唯一关心的问题,还是滚动时缓慢?
  • 当我说行时,我指的是单元格,对不起。我启用了分页,并且滚动非常流畅,除非我尝试尽可能快地滚动,甚至还不错。真的只是内存问题。

标签: ios performance memory uicollectionview memory-efficient


【解决方案1】:

您的单元格中的图像有多大?图像是消耗记忆的东西。你是如何加载图像的?使用imageNamed: 会将图像缓存在内存中。如果使用imageWithContentsOfFile:,则不会缓存内容。

【讨论】:

  • 我实际上是通过名为 EGOImageLoader 的背景图像加载代码加载它们的。但这不是问题,因为当我只删除图像和图像代码时,会节省少量内存。
猜你喜欢
  • 2019-04-27
  • 2011-02-21
  • 2016-12-18
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
  • 2022-10-28
  • 2021-12-11
  • 2019-12-05
相关资源
最近更新 更多