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? 
相關問題