2017-03-28 149 views
0

我從文檔目錄中檢索圖像數據和字符串,並在ViewController1的集合視圖中使用此數據。然後通過單擊收集視圖單元格轉到下一個視圖控制器ViewController2,並再次從文檔目錄檢索圖像數據和字符串,並在另一個集合視圖中使用此數據。現在的問題是,當我從一個視圖控制器轉到另一個視圖控制器時,每次都會增加內存使用量並導致應用程序崩潰。這種內存增加的原因是什麼,以及我將如何解決它?當應用程序運行時不斷增加的內存使用量(Swift)

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell{ 
let cell: PhotoThumbnail = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! PhotoThumbnail 

do{ 
      let ta = foldersDirectoryPath + "/\(self.titles2[indexPath.item])" 
      print(ta) 
      let ti = try NSFileManager.defaultManager().contentsOfDirectoryAtPath(ta) 
      print(ti.count) 
      cell.amountLabel.layer.borderWidth = 1 
      cell.amountLabel.layer.borderColor = UIColor(red:16/255.0, green:56/255.0, blue:70/255.0, alpha: 1.0).CGColor 
      cell.amountLabel.text = "\(ti.count)" 


     }catch{ 

     } 

     cell.setThumbnailImage(images[indexPath.item]) 
     let str = titles2[indexPath.item] 
     let nameString = str.substringWithRange(Range<String.Index>(start: str.startIndex.advancedBy(24), end: str.endIndex.advancedBy(0))) 

     cell.nameLabel.text = nameString 
     print(dateArray[indexPath.item]) 
     cell.dateLabel.text = dateArray[indexPath.item] 

    return cell 
} 


class PhotoThumbnail: UICollectionViewCell { 

@IBOutlet weak var imgView : UIImageView! 

@IBOutlet weak var nameLabel: UILabel! 
@IBOutlet weak var dateLabel: UILabel! 
@IBOutlet weak var amountLabel: UILabel! 

    func setThumbnailImage(thumbnailImage: UIImage){ 
    self.imgView.image = thumbnailImage 
    } 

} 

此代碼適用於第1個集合視圖。

+0

請確保您在'cellForItemAt indexPath'方法中使用'dequeueReusableCell'。這將是連擊如果你可以提供你的collectionview的代碼,以便我可以幫助你調試問題。] –

+0

'setThumbnailImage(images [indexPath.item])'中發生了什麼?我想這將是從圖像生成縮略圖的代碼吧?所以基本上可以使內存消耗有所不同。嘗試暫時評論該行,並檢查內存消耗以找出問題。其他代碼對我來說看起來很好。 –

+0

我編輯了我的問題來解釋setThumbnailImage(images [indexPath.item])。圖像是一個UIImage類型的數組。 –

回答

1

它創建視圖的一個和兩個的多個實例。您應該使用segue將數據從一個視圖傳遞到另一個視圖,然後返回。

+0

有沒有另一種解決方案?我遇到了一些與segue有關的問題,並且不想使用segue。現在我使用帶有標識符的當前視圖控制器。 –

0

您需要將所有聲明創建爲可選項,並且當您從一個視圖控制器轉到另一個控制器時,請創建一個函數來釋放所有這些對象。這將有助於管理內存問題。

相關問題