gpt4 book ai didi

ios - 从 Appdelegate 实例化 View Controller

转载 作者:行者123 更新时间:2023-11-30 14:11:31 24 4
gpt4 key购买 nike

如果收到推送通知并且用户点击它,我将通过以下代码加载特定的 View Controller :

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,以便智能手机的内存得到越来越多的使用?如果是这种情况,我可以在初始化新 View Controller 之前删除所有已通过应用程序的先前使用初始化的 View Controller 吗?是popToRootViewController有帮助吗?

** 更新 **我尝试了您的两个建议,但每次点击通知消息时,内存使用量都会增加约 10 MB。也许它与我在 AppDelegate 中初始化 ViewController 的方法无关,但与我加载“ApplicantsViewController”或使用 let storyboard = UIStoryboard(name: "Main", bundle: nil) 初始化 Storyboard 的方式相关。造成这种效果吗?

这是 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()

}

最佳答案

是的,它会导致越来越多的ViewController堆积在Navigation Controller中。我的选择是在 appDelegate 中创建一个全局变量

var applicantsVC:ApplicantsViewController?

在通知函数中,执行如下操作:

if (applicantsVC == nil){
self.applicantsVC = storyboard.instantiateViewControllerWithIdentifier("ApplicantsViewController") as! ApplicantsViewController
}

关于ios - 从 Appdelegate 实例化 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31705513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com