Ако дойде Push Notification и потребителят го докосне, зареждам конкретен контролер за изглед чрез този код:
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()
Въпросът ми е: Този код инстанцира ли ViewControllers отново и отново за всяко докоснато уведомително съобщение, така че паметта на смартфона да се използва все повече и повече? И ако случаят е такъв, мога ли да се отърва от всички ViewControllers, които вече са били инициализирани от предишни употреби на приложението, преди да инициализирам нови? popToRootViewController
помага ли?
** АКТУАЛИЗАЦИЯ ** Опитах и двете ви препоръки, но използването на памет се увеличава с около 10 MB всеки път, когато докосна уведомителното съобщение. Може би не е свързано с метода, по който инициализирам 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()
}