【发布时间】:2015-10-20 17:35:24
【问题描述】:
如果推送通知进入并且用户点击它,我会通过以下代码加载特定的视图控制器:
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 MB。也许它与我在 AppDelegate 中初始化 ViewControllers 的方法无关,而是我加载“ApplicantsViewController”的方式或使用let storyboard = UIStoryboard(name: "Main", bundle: nil) 初始化 Storyboard 的方式会导致这种效果?
这里是申请者视图控制器的初始化(我还取消了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()
}
【问题讨论】:
标签: ios swift viewcontroller appdelegate