我的应用程序中有一个问题,它的内存不断增加。所以这里是我的应用程序结构。我正在使用SWrevealViewController
作为幻灯片菜单。视图控制器在执行segue时不会释放
Slidemenu
- View Controller A
- View Controller B
- View Controller C
我的视图控制器A由UICollectionView
和ScrollView
组成。 当我从视图控制器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的幻灯片菜单。
尝试的ViewController一个实施DEINIT(),然后通过侧面菜单到视图控制器B,如果没有,那么你把它叫做类仍然在堆栈中。再次从侧面菜单转到ViewController A并检查viewDidLoad()是否再次在ViewController A中被调用。如果是这样,那么你的班级被加载两次。 – sinner
我在视图控制器A上声明了'deinit {print(“deinit vc A”)}'并且从A移动到B到A到B到A到B广告等等,但它永远不会被调用。 –
只有当A从堆栈中移除时,deinit()才会被调用。在当前情况下,当用户从A级移动到B级时,A级仍保留在内存中。 – sinner