Память не передается, когда я переключаюсь между контроллерами представления - PullRequest
0 голосов
/ 14 января 2019

У меня есть приложение с контроллером основного вида, у которого есть пользовательское представление, в котором в каждой ячейке указан пользователь. Каждая ячейка имеет аватарку. При нажатии на картинку профиля вы переходите на страницу профиля этого пользователя, используя pushViewController(), и использование памяти увеличивается, как обычно. Проблема в том, что когда я возвращаюсь на главную страницу, память все еще очень высока (я вижу это в отладочном навигаторе). Если щелкнуть другой профиль на главной странице, память увеличится еще больше, и так далее, пока не произойдет сбой приложения. Пожалуйста, покажи мне, где я облажался.

Мой класс ячеек выглядит так:

class LatestCell: UITableViewCell {
weak var delegate: LatestCellDelegator!    
@objc func profPicClick(tapGestureRecognizer: UITapGestureRecognizer){
let tImage = tapGestureRecognizer.view as! UIImageView
if(self.delegate != nil){
            self.delegate.goToProfilePage(userID: fUserId!,  profileImage: tImage )
        }
}    

//I'm keeping my TableView class separate from My main controller class because I use my tableView everywhere. Just trying to be efficient. It looks like this:

`class ReusableTableView:  NSObject, UITableViewDataSource, UITableViewDelegate, LatestCellDelegator {    
     weak var parentCollectionController: UIViewController?
    init(_ tv: UITableView, _ data: [LatestStatus],_ pcc: UIViewController)
    {
        super.init()
        self.tableViewData = data
        self.tableView = tv
        parentCollectionController = pcc
        self.tableView?.register(UINib(nibName: "FreeCell", bundle: nil), forCellReuseIdentifier: "FreeCell")
    }    
    ...
    //Trying to deallocate
    deinit {
        print("deinit is called")
    }    
        ...
        func goToProfilePage(userID dataobjectUID: String, profileImage dataProfileImage: UIImageView) {
        weak var profileVC = storyboard.instantiateViewController(withIdentifier: "RealProfilePage") as? ProfilePage2
        profileVC?.userId = dataobjectUID 
parentCollectionController?.navigationController?.pushViewController(profileVC!, animated: true)
        profileVC = nil
    } 

`

Это главный контроллер, который содержит tableView. Как вы видите ниже, у меня есть MainViewController как один из параметров, когда я устанавливаю reusableTableView, потому что именно так я могу вызывать parentCollectionController? .NavigationController? .PushViewController (... в классе ReusableTableView:

class MainViewController: UIViewController {
@IBOutlet weak var theTableview: UITableView!
var usersArray: [Users]?
weak var thisController = self    
override func viewDidLoad() {
reusableTableView = ReusableTableView(theTableview, usersArray!, thisController!)
}

и, наконец, это страница профиля, которая отображается при нажатии на изображение профиля

class ProfilePage2: UIViewController{
//heavy code is doneby using the userId to show pics and network calls etc
  var userId: String?
    deinit {
        print("deinit is being called in Profile Page")
    }  
//deinit is never called by the app for some reason 

Использование памяти увеличивается, когда вызывается pushViewController (), но при нажатии кнопки «Назад» память не уменьшается, и я возвращаюсь к MainController. Память увеличивается на 20 МБ каждый раз. Как правильно освободить память? Спасибо

...