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)
}
}
}
これまでのところ、私はアルバムアートをキャッシュだけでなく、オーバーライドprepareForReuse
とbackgroundImageView.image = nil
を設定するNSCacheを使用しようとしましたが、これは効果がないようです。さらに、同様の問題を引き起こしていると思われるカバーアート用の小さなUIImageviewsを同様に使用するテーブルビューがあります。
私は明らかに何かを見落としている可能性はありますか?小さなアルバムアートを持った数百のセルでは、これは大量のメモリ使用なしに可能であるはずです。
ご迷惑をおかけして申し訳ありません。