質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

7133閲覧

Swift 3.0でUIImageのメモリを解放したい

TaikanHoshino

総合スコア7

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/11/22 14:42

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を入れてみたりしましたが変わらず、でした。
ご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

参考まで。
UIImage named: のメモリ解放について

同じ質問って偶然?流行ってるの?

投稿2016/11/22 14:51

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaikanHoshino

2016/11/22 15:24

ありがとうございます。 // 波形UIImage インスタンスの生成 let resource_0 = Bundle.main.path(forResource: "img/wave\(musicNumber!)", ofType: "png") let resource_1 = Bundle.main.path(forResource: "img/wave\(musicNumber!)_1", ofType: "png") let resource_2 = Bundle.main.path(forResource: "img/wave\(musicNumber!)_2", ofType: "png") let resource_3 = Bundle.main.path(forResource: "img/wave\(musicNumber!)_3", ofType: "png") let resource_4 = Bundle.main.path(forResource: "img/wave\(musicNumber!)_4", ofType: "png") let resource_5 = Bundle.main.path(forResource: "img/wave\(musicNumber!)_5", ofType: "png") let waveImage_0 = UIImage(contentsOfFile: resource_0!) let waveImage_1 = UIImage(contentsOfFile: resource_1!) let waveImage_2 = UIImage(contentsOfFile: resource_2!) let waveImage_3 = UIImage(contentsOfFile: resource_3!) let waveImage_4 = UIImage(contentsOfFile: resource_4!) let waveImage_5 = UIImage(contentsOfFile: resource_5!) とすることで解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問