Swift慢收集视图

时间:2014-12-04 03:06:42

标签: ios swift uicollectionviewcell

我有一个集合视图,可以获取我存储的图像并显示它们。但是,当我运行它时,我得到一个内存错误和一个非常缓慢/滞后的显示。这是我的代码:

var players = ["1", "2", "3", "4", "5", "10", "11", "12", "13", "15", "20", "22", "24", "25", "31", "31", "33", "34"]


@IBOutlet weak var collectionView: UICollectionView!
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    return 1
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return 17


}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    var cell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as HomeCollectionViewCell
    cell.imageViewTwo.image = UIImage(named: "\(players[indexPath.row])")
    return cell
}

有没有一种更容易的方法可以做到这一点,我错过了?

1 个答案:

答案 0 :(得分:3)

你应该使用Instruments来弄清楚什么是慢的。这就是它的用途!

但是,我猜这一行是问题所在:

cell.imageViewTwo.image = UIImage(named: "\(players[indexPath.row])")

如果这些图像很大,会发生两件坏事:打开每张图片需要时间,而且由于显示的图像比加载的图像小得多,所以会浪费内存。滚动时会发生。正是出于这个原因,你在cellForItemAtIndexPath:所做的一切都需要非常非常快。好吧,你的实施显然不是很快。

您有两种选择 - 实际上您可以同时使用两种选择:

  • 准备更好的图像。使用png并以显示所需的实际尺寸使用它们。

  • 使用延迟图像加载,以便在后台线程中加载图像,而不是减慢滚动速度。