У меня есть приложение с контроллером основного вида, у которого есть пользовательское представление, в котором в каждой ячейке указан пользователь. Каждая ячейка имеет аватарку. При нажатии на картинку профиля вы переходите на страницу профиля этого пользователя, используя 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 МБ каждый раз. Как правильно освободить память? Спасибо