2017-03-28 94 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

您需要将所有声明创建为可选项,并且当您从一个视图控制器转到另一个控制器时,请创建一个函数来释放所有这些对象。这将有助于管理内存问题。

相关问题