2016-08-07 4 views
0

Ich baue eine grundlegende Musik-Player-Anwendung, die Verwendung von Apples Mediaplayer macht die iPod-Bibliothek zuzugreifen. In einer meiner Ansichten verwende ich UICollectionView, um Albumcover für alle Alben in der Bibliothek anzuzeigen. Beim Scrollen bekomme ich einen enormen Anstieg der Speicherauslastung, was ich erwarte, aber die Nutzung nimmt nie ab, und schließlich stürzt die App aufgrund des Speicherdrucks ab und erreicht im Xcode-Debugger einen Höchstwert von einigen hundert mb. dieseerleben Speicherleck mit UICollectionView und MPMediaItemArtwork

ist im Wesentlichen der Code, den ich mit jeder Zelle Collection konfigurieren:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(ALBUM_CELL_REUSE_IDENTIFIER, forIndexPath: indexPath) as! AlbumCollectionViewCell 
    cell.configureWithAlbum(albumItems[indexPath.row]) 

    return cell 
} 


func configureWithAlbum(album: MPMediaItemCollection){ 
    guard let representItem = album.representativeItem else{ 
     return 
    } 

    if let albumTitle = representItem.albumTitle{ 
     if let artwork = AlbumsCollectionViewDataSource.sharedInstance.artworkDict[albumTitle]{ 
      backgroundImageView.image = artwork.imageWithSize(backgroundImageView.frame.size) 
     } 
    } 
} 

Bisher habe ich versucht nscache zu verwenden, um das Albumcover cachen, sowie Überschreibung prepareForReuse und setzen backgroundImageView.image = nil, aber das scheint keine Wirkung zu haben. Zusätzlich habe ich eine tabellarische Ansicht, die in ähnlicher Weise kleine UIImageviews für Cover-Art verwendet, die ähnliche Probleme zu verursachen scheinen.

Ist es möglich, dass ich offensichtlich etwas mit Blick auf bin? Für ein paar hundert Zellen mit kleiner Album-Kunst, denke ich, sollte dies ohne eine Menge Speicherverbrauch möglich sein.

Jede Hilfe wird sehr geschätzt.

Antwort

0

vorgefertigt- nicht sicher, warum, aber MPMediaItemArtwork.imageWithSize(size:CGSize) Methode war ständig Speicher Neuzuweisung jedes Mal, es hieß. Stattdessen subclassed ich NSObject mit UIImage Eigentum und alle Kunstwerke in einem Array dieser NSObject s auf die Anfangslast der collectionViewDataSource gespeichert, und reichte es configureWithAlbum.

siehe MPMediaItemPropertyArtwork causes crash (weird issue)