3

我的应用程序中有一个问题,它的内存不断增加。所以这里是我的应用程序结构。我正在使用SWrevealViewController作为幻灯片菜单。视图控制器在执行segue时不会释放

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

我的视图控制器A由UICollectionViewScrollView组成。 当我从视图控制器A执行segue到视图控制器B,内存是做得很好。但是如果我要使用幻灯片菜单查看控制器A,内存会增加。 这是SWRevealViewController的表委托我的didSelectRowAtIndexPath。我使用performSegueWithIdentifier

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

然后我会通过滑动菜单到视图控制器B,然后将再次视图控制器等,在这一点上内存增加不断。

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

所以我认为这是关于我的参考UICollectionView。我已经声明,weak财产,但它什么也没做。

@IBOutlet weak var othersCollectionView: UICollectionView! 

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

这是我的内存使用情况图表,在每个“黑色箭头”上,我移动到视图控制器A的幻灯片菜单。

请让我知道如果我做错了什么。非常感谢。 Memory Usage

+0

尝试的ViewController一个实施DEINIT(),然后通过侧面菜单到视图控制器B,如果没有,那么你把它叫做类仍然在堆栈中。再次从侧面菜单转到ViewController A并检查viewDidLoad()是否再次在ViewController A中被调用。如果是这样,那么你的班级被加载两次。 – sinner

+0

我在视图控制器A上声明了'deinit {print(“deinit vc A”)}'并且从A移动到B到A到B到A到B广告等等,但它永远不会被调用。 –

+0

只有当A从堆栈中移除时,deinit()才会被调用。在当前情况下,当用户从A级移动到B级时,A级仍保留在内存中。 – sinner

回答

0

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

下面是一个例子:

类MyTableViewCell:UITableViewCell的{

@IBOutlet weak var myNameTextField: UITextField! 

weak var delegate: CellDbErrorDelegate? 
相关问题