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

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

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

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Swift 2

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

解決済

UICollectionViewを使ったカメラロールの表示 スクロールでmemory warningが起きる

gami
gami

総合スコア17

iOS

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Swift 2

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

1回答

0リアクション

0クリップ

3395閲覧

投稿2016/07/25 05:16

編集2016/07/26 07:07

###前提・実現したいこと
[iOS swift]UICollectionView、PHAssetを使ったカメラロールの表示
セルにカメラロールの画像を入れこむことは下記のコードで実現できたのですが、メモリの解放がうまくできません。

###発生している問題・エラーメッセージ
画像が1000枚程度カメラロールにあり、初期表示は問題ないが素早くスクロールをするとアプリケーションが落ちてしまします。
正しい表示の方法、メモリの解放等ご教授いただけたらと思います。
よろしくお願いします。

Received memory warning.

###該当のソースコード

swift

import UIKit import Photos class albumViewController2: UIViewController,UICollectionViewDataSource,UICollectionViewDelegate { var photoAssets = [PHAsset]() var photoImages = [UIImage?]() var photoCounts:Int = 0 var collectionView:UICollectionView! override func viewDidLoad() { super.viewDidLoad() let screenWidth = CGFloat( UIScreen.mainScreen().bounds.size.width) self.view.backgroundColor = UIColor.grayColor() //カメラロールから画像取得 getAllPhotosInfo() //レイアウト部 let flowLayout = UICollectionViewFlowLayout() flowLayout.scrollDirection = .Vertical flowLayout.minimumInteritemSpacing = 0.0 flowLayout.minimumLineSpacing = 0.0 flowLayout.itemSize = CGSizeMake(screenWidth / 4, screenWidth / 4) // コレクションビュー作成 collectionView = UICollectionView(frame: view.frame, collectionViewLayout: flowLayout) collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "cell") collectionView.dataSource = self collectionView!.delegate = self collectionView.backgroundColor = UIColor.clearColor() view.addSubview(collectionView) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func getAllPhotosInfo() { photoAssets = [] // ソート条件を指定 let options = PHFetchOptions() options.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: false) ] // 画像すべてのAssetを取得 let assets: PHFetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: options) assets.enumerateObjectsUsingBlock { (asset, index, stop) -> Void in self.photoAssets.append(asset as! PHAsset) } photoCounts = photoAssets.count } //コレクションビュー func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { return 1 } func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return photoCounts } func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as UICollectionViewCell cell.backgroundColor = UIColor.brownColor() //PHAseetから画像取得のリクエストを投げてcellにセット let asset = photoAssets[indexPath.row] var photo: UIImage? let manager: PHImageManager = PHImageManager() for subview in cell.contentView.subviews{ subview.removeFromSuperview() } manager.requestImageForAsset(asset, targetSize: CGSizeMake(CGFloat(asset.pixelWidth) , CGFloat(asset.pixelHeight) ), contentMode: .AspectFill, options: nil) { (image, info) -> Void in photo = image! } let imageview:UIImageView=UIImageView(frame: CGRectMake(1, 1, (self.view.bounds.width / 4) - 2, (self.view.bounds.width / 4) - 2 )) imageview.image = photo imageview.contentMode = .Center imageview.clipsToBounds = true cell.contentView.addSubview(imageview) return cell } }

###補足情報
Xcode 7.2.1 swift

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

fuzzball

2016/07/25 07:51

ゆっくりスクロールさせると落ちないんでしょうか?
gami

2016/07/25 07:59

閲覧ありがとうございます。 ゆっくりスクロールさせると落ちません。一画面に28セル表示させていて、勢い良くスクロールさせるとカクついてmemory warningが起きます。
fuzzball

2016/07/25 08:07

画像リクエストの処理を無くしても同じようになるでしょうか?具体的には、「//PHAseetから画像取得の〜」から「photo = image! }」までコメントアウト。「imageview.image = photo」もコメントアウト。
gami

2016/07/26 00:37

ご指摘のように画像リクエストをコメントアウトしたところ症状は出ませんでした。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

iOS

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Swift 2

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