Если приходит push-уведомление и пользователь нажимает на него, я загружаю определенный контроллер представления с помощью этого кода:
let tabbarController = storyboard.instantiateViewControllerWithIdentifier("employerTabBarViewController") as! UITabBarController
tabbarController.selectedIndex = 0
self.window?.rootViewController = tabbarController
let navigationController = tabbarController.viewControllers?.first as! UINavigationController
var applicantsVC = storyboard.instantiateViewControllerWithIdentifier("ApplicantsViewController") as! ApplicantsViewController
applicantsVC.job = job
navigationController.pushViewController(applicantsVC, animated: false)
self.window?.makeKeyAndVisible()
Мой вопрос: создает ли этот код экземпляры ViewController снова и снова для каждого постукивающего уведомления, чтобы память смартфона использовалась все больше и больше? И если это так, могу ли я избавиться от всех ViewControllers, которые уже были инициализированы предыдущим использованием приложения, прежде чем инициализировать новые? popToRootViewController
помогает?
** ОБНОВЛЕНИЕ ** Я попробовал обе ваши рекомендации, но использование памяти увеличилось примерно на 10 МБ каждый раз, когда я нажимаю на уведомление. Возможно, это связано не с методом, которым я инициализирую ViewControllers в AppDelegate, а с тем, как я загружаю «ApplicantsViewController», или инициализация Storyboard с помощью let storyboard = UIStoryboard(name: "Main", bundle: nil)
вызывает этот эффект?
Вот инициализация ApplicantsViewController (я также раскомментировал reloadData()
и var tableViewController = UITableViewController()
- это не остановило увеличение памяти):
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var openPositionsStatus: UILabel!
@IBOutlet weak var changeJobOfferStatusButton: UIBarButtonItem!
var job : JobOffer?
var favorites = [Employee]()
var applicants = [Employee]()
var applications = [Application]()
var takenPositions = 0
var refreshControl : UIRefreshControl?
var offeredJobsVC : OfferedJobsViewController?
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "receiveNotification:", name: "refreshApplicants", object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "receiveNotification:", name: "jobOfferStatusChanged", object: nil)
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
Helper.setBackground(self)
refreshControl = UIRefreshControl()
refreshControl!.addTarget(self, action: Selector("reloadData"), forControlEvents: UIControlEvents.ValueChanged)
self.updateJobOfferActionButton(self, jobOffer: self.job!, button: self.changeJobOfferStatusButton)
var tableViewController = UITableViewController()
tableViewController.tableView = self.tableView
tableViewController.refreshControl = refreshControl
// call reloadData after refreshControl solved sorting problems
reloadData()
}