执行segue时,View Controller不会解除分配

时间:2016-08-24 09:58:33

标签: ios swift memory-management uicollectionview swrevealviewcontroller

我的应用程序中存在一个问题,即其内存不断增加。所以这是我的应用程序结构。我正在使用SWrevealViewController进行幻灯片放映。

Slidemenu
    - View Controller A
    - View Controller B
    - View Controller C

我的视图控制器A由UICollectionViewScrollView组成。 当我从视图控制器A执行segue到View Controller B时,内存运行正常。但是,如果我要使用幻灯片菜单查看控制器A,内存会增加。 这是我在SWRevealViewController的表委托上的didSelectRowAtIndexPath。我正在使用performSegueWithIdentifier

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if isLoggedIn {
        self.performSegueWithIdentifier(idSegueLoggedIn[indexPath.row], sender: self)
    }
}

然后我将通过幻灯片菜单查看控制器B,然后再次转到View Controller A,此时内存不断增加。

看起来我的视图控制器A由UICollectionView组成,并不会在内存中释放它的对象。但是,如果我删除UICollectionView,我的记忆问题就会消失,并且运行良好。

所以我认为这是我对UICollectionView的引用。我已经声明了weak属性,但它没有做任何事情。

@IBOutlet weak var othersCollectionView: UICollectionView!

我尝试在我的View Controlle A中调用deinit(),但它没有被调用。

这是我的内存使用情况图,在每个"黑色箭头"上,我使用幻灯片菜单移动到View Controller A.

如果我做错了,请告诉我。非常感谢。 Memory Usage

1 个答案:

答案 0 :(得分:0)

我回答的有点晚了,但我遇到了类似的问题。最后,我的问题与某些UITableViewCell中的委托声明相关联。我通过将委托变量声明为弱来修复问题。

以下是一个例子:

class MyTableViewCell:UITableViewCell {

@IBOutlet weak var myNameTextField: UITextField!

weak var delegate: CellDbErrorDelegate?