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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

1回答

2593閲覧

[iOS] UIImageがメモリを多くとってしまう。

yukitoto

総合スコア53

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/07/27 04:22

開発も終盤にさしかかり、メモリをウォッチし始めたのですが、あるタイミングでメモリ使用量が跳ね上がるので何が原因か探ると、UIImageVIewでした。

カメラロールから取得したUIImageをUIImageViewにsetして表示すると、一つにつき30MB近く消費してしまいます。
そして、そのUIImageViewを削除するとその瞬間に綺麗にメモリが減ります。
実装には、QBImagePickerControllerというライブラリを利用しております。

何卒お力をお貸しください...

swift

1func qb_imagePickerController(imagePickerController: QBImagePickerController!, didFinishPickingAssets assets: [AnyObject]!) { 2 self.dismissViewControllerAnimated(true, completion: nil) 3 4 for asset in assets { 5 let phiManager = PHImageManager.defaultManager() 6 guard let phAsset = asset as? PHAsset else { return } 7 8 phiManager.requestImageDataForAsset(phAsset, options: nil, resultHandler: { (imageData, dataUTI, orientation, info) in 9 guard let data = imageData else { return } 10 guard let image = UIImage(data: data) else { return } 11 // ここで画像を表示するためにUIImageViewに追加 12 self.createPostView.addImageViewWithUIImage(image) 13 }) 14 } 15 }

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

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

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

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

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

fuzzball

2016/07/27 04:50 編集

その画像のサイズを教えて下さい。あと、どうやってメモリの使用量を調べているか教えて下さい。
yukitoto

2016/07/27 06:01

質問ありがとうございます! 大きさは、500 × 300 以内に収まるようにしています! メモリの使用量については、XCodeのDebug Sessionを参考に計測しています!
fuzzball

2016/07/27 06:05

UIImageViewのサイズではなく、画像そのもののサイズが500x300なのですか?
guest

回答1

0

例えば、iPhone5で撮った写真のサイズは2448x3264。
2448 * 3264 * 4 = 31,961,088 = 30.48MiB
ということではないでしょうか?

requestImageDataForAssetのオプションを指定するとか、
requestImageForAssetを使ってサイズを指定するとか、
必要最小限のサイズで取得するようにすれば使用メモリは減ります。

投稿2016/07/27 05:57

fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問