Предупреждения памяти iOS

Я пытаюсь заполнить представление коллекции изображениями, загруженными из базы данных Parse, но я получаю предупреждения памяти, сопровождаемые случайными сбоями. Кто-нибудь знает, как другие приложения могут представить так много изображений без сбоев? Может кто-нибудь показать мне, как оптимизировать то, что у меня уже есть? Вот весь соответствующий код: https://gist.github.com/sungjp/99ae82dca625f0d73730

var imageCache : NSCache = NSCache()


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    self.imageCache.removeAllObjects()
}


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    //In storyboard, my collection view cell has the identifier "PostCell"    
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("PostCell", forIndexPath: indexPath) as! CollectionViewCell

    //I have an array called "posts" that's filled with PFObjects that have UIImage data
    let postings: PFObject = posts[indexPath.row]

    //setting my cell's string property called "objectId" to the PFObject's ID for the purpose of caching shown below
    cell.objectId = postings.objectId! as String

    let theImage: AnyObject = postings["imageFile"] as! PFFile

    if let image = self.imageCache.objectForKey(postings.objectId!) as? UIImage {

    cell.imageView.image = image
    println("had this photo in cache")

    } else {

        theImage.getDataInBackgroundWithBlock { (imageData: NSData?, error: NSError?) -> Void in

        if error != nil {

            println("error caching or downloading image")
            return
        }

        let cellImage = UIImage(data:imageData!, scale: 1.0)
        self.imageCache.setObject(cellImage!, forKey: postings.objectId!)
        cell.imageView.image = cellImage
        println("just added another photo to cache")
        }
    }

    return cell
}


class CollectionViewCell: UICollectionViewCell {

    var objectId: String!

}

1 ответ

Решение
  1. Как сказал @Adrian B: читайте об инструментах.
  2. Вы можете уменьшить масштаб изображений перед их сохранением или сохранить дополнительную уменьшенную копию для отображения в виде таблицы. Это зависит от того, насколько хорошие изображения вам нужны - предположительно для табличного представления не такого большого размера, как полноразмерные изображения с МБ данных. На самом деле, изображения также будут выглядеть лучше, если они будут правильно масштабированы. Это само по себе должно позаботиться о задержках.
  3. У вас есть стратегия кэширования onw, но если вы хотите улучшить производительность, попробуйте SDWebImage (см.: https://github.com/rs/SDWebImage). Эта библиотека кэширует изображения и загружает их асинхронно.
Другие вопросы по тегам