Swift 3.0で大きな画像を表示させるアプリを作っています。
画面遷移するたびに下記の"musicNumber"という変数が変わり、
対応する画像を表示しているのですが、
そのうちにメモリが溜まってアプリが落ちてしまいます。
手前の画面に戻った時に画像のメモリを解放したいのですがうまく行きません。
###該当のソースコード
Swift
1class playViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate, AVAudioPlayerDelegate { 2 3 4 //波形UIImageView 5 var waveView_0 = UIImageView() 6 var waveView_1 = UIImageView() 7 var waveView_2 = UIImageView() 8 var waveView_3 = UIImageView() 9 var waveView_4 = UIImageView() 10 var waveView_5 = UIImageView() 11 12 @IBOutlet weak var waveContainer: UIView! 13 14 override func viewDidLoad() { 15 super.viewDidLoad() 16 17 //波形アニメーション 18 func animateImage(){ 19 20 autoreleasepool{ 21 // 波形UIImage インスタンスの生成 22 let waveImage_0:UIImage = UIImage(named:"img/wave\(musicNumber!).png")! 23 let waveImage_1:UIImage = UIImage(named:"img/wave\(musicNumber!)_1.png")! 24 let waveImage_2:UIImage = UIImage(named:"img/wave\(musicNumber!)_2.png")! 25 let waveImage_3:UIImage = UIImage(named:"img/wave\(musicNumber!)_3.png")! 26 let waveImage_4:UIImage = UIImage(named:"img/wave\(musicNumber!)_4.png")! 27 let waveImage_5:UIImage = UIImage(named:"img/wave\(musicNumber!)_5.png")! 28 29 // 波形UIImageView インスタンス生成 30 waveView_0 = UIImageView(image:waveImage_0) 31 waveView_1 = UIImageView(image:waveImage_1) 32 waveView_2 = UIImageView(image:waveImage_2) 33 waveView_3 = UIImageView(image:waveImage_3) 34 waveView_4 = UIImageView(image:waveImage_4) 35 waveView_5 = UIImageView(image:waveImage_5) 36 } 37 38 // 波形UIImageView をCGRectで作った矩形に合わせる 39 let rect:CGRect = CGRect(x:512, y:100, width:waveWidth, height:440) 40 waveView_0.frame = rect 41 waveView_1.frame = rect 42 waveView_2.frame = rect 43 waveView_3.frame = rect 44 waveView_4.frame = rect 45 waveView_5.frame = rect 46 47 // UIImageview に 波形UIImageView を追加する 48 waveContainer.addSubview(waveView_0) 49 waveContainer.addSubview(waveView_1) 50 waveContainer.addSubview(waveView_2) 51 waveContainer.addSubview(waveView_3) 52 waveContainer.addSubview(waveView_4) 53 waveContainer.addSubview(waveView_5) 54 } 55 56// 画面遷移時の処理 57 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 58 59 //波形画像メモリ解放 60 waveView_0.image=nil 61 waveView_1.image=nil 62 waveView_2.image=nil 63 waveView_3.image=nil 64 waveView_4.image=nil 65 waveView_5.image=nil 66 67 waveView_0.layer.sublayers=nil 68 waveView_1.layer.sublayers=nil 69 waveView_2.layer.sublayers=nil 70 waveView_3.layer.sublayers=nil 71 waveView_4.layer.sublayers=nil 72 waveView_5.layer.sublayers=nil 73 74 waveView_0.removeFromSuperview() 75 waveView_1.removeFromSuperview() 76 waveView_2.removeFromSuperview() 77 waveView_3.removeFromSuperview() 78 waveView_4.removeFromSuperview() 79 waveView_5.removeFromSuperview() 80 81 waveContainer.layer.sublayers=nil 82 waveContainer.removeFromSuperview() 83 }
###試したこと
Swiftにあまりなれていなく、このあたりを参考にメモリ解放の部分を書いたり、
http://blog.it.churaumi.tv/ios-uiimage-view-memory-leak-nil-and-removefromsuperview
autoreleasepoolを入れてみたりしましたが変わらず、でした。
ご教示いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/22 15:24