我的應用程序中有一個問題,它的內存不斷增加。所以這裏是我的應用程序結構。我正在使用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