2016-08-07 1 views
0

AppleのMediaPlayerを使用してiPodライブラリにアクセスする基本的な音楽プレーヤーアプリケーションを構築しています。私の見解では、UICollectionViewを使ってライブラリ内のすべてのアルバムのアルバムアートを表示しています。スクロールするとメモリの使用量が大幅に増えていますが、使用量は減少することはなく、最終的にはXcodeデバッガで数百MB程度のメモリ圧迫でアプリがクラッシュします。UICollectionViewとMPMediaItemArtworkを使用してメモリリークを経験する

これは、基本的に私は、各collectionViewセルを構成するために使用しているコードです:

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) 
     } 
    } 
} 

これまでのところ、私はアルバムアートをキャッシュだけでなく、オーバーライドprepareForReusebackgroundImageView.image = nilを設定するNSCacheを使用しようとしましたが、これは効果がないようです。さらに、同様の問題を引き起こしていると思われるカバーアート用の小さなUIImageviewsを同様に使用するテーブルビューがあります。

私は明らかに何かを見落としている可能性はありますか?小さなアルバムアートを持った数百のセルでは、これは大量のメモリ使用なしに可能であるはずです。

ご迷惑をおかけして申し訳ありません。

答えて

0

修正されました - 理由はわかりませんが、MPMediaItemArtwork.imageWithSize(size:CGSize)メソッドは、呼び出されるたびに常にメモリを再割り当てしていました。代わりに、NSObjectをUIImageプロパティにサブクラス化し、collectionViewDataSourceの初期ロード時にすべてのアートワークをNSObjectの配列に格納し、configureWithAlbumに渡しました。

MPMediaItemPropertyArtwork causes crash (weird issue)

関連する問題