UIAlertController和内存使用情况

时间:2016-11-09 11:12:49

标签: ios swift memory-management swift3 uialertcontroller

我有一个非常简单的项目:只有一个Jane Doe和一个ViewController。该按钮的UIButton为:

IBAction

当应用程序完成启动时,内存使用量为14,4 Mb。

当我点击按钮时它达到18,4 Mb(如果我再次点击按钮,它最终达到20 Mb)。

无论如何,我想当我点击UIAlertController的取消确定按钮时,内存将会恢复到14,4,甚至很慢,但事实并非如此。

我想让var alertViewControllerTextField: UITextField? var promptController = UIAlertController(title: "Type Something", message: nil, preferredStyle: .alert) let ok = UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in print("\(alertViewControllerTextField?.text)") }) let cancel = UIAlertAction(title: "Cancel", style: .cancel) { (action) -> Void in //promptController = nil } promptController.addAction(ok) promptController.addAction(cancel) promptController.addTextField { (textField) -> Void in alertViewControllerTextField = textField } self.present(promptController, animated: true, completion: nil) UIAlertController有机会在关闭时为其分配optional,但nil不能是UIAlertController因为你不能将它声明为可选的。我想把它变成一个成员并用nil关键字声明它(没有运气)。

那么,当我点击UIAlertController的其中一个按钮时,有什么方法可以减少内存使用量吗?

2 个答案:

答案 0 :(得分:0)

PLease把DispatchQueue这个代码放到试试我这个问题解决了这个问题

DispatchQueue.global(qos: .userInitiated).async
{
        self.present(promptController, animated: true, completion: nil)
}

答案 1 :(得分:0)

我在其他地方看到你需要声明alertViewControllerTextField弱者,以便行动不会保留它。 (不确定我是否完全理解这一点。)

所以试试:

var alertViewControllerTextField: UITextField?

var promptController = UIAlertController(title: "Type Something", message: nil, preferredStyle: .alert)

let ok = UIAlertAction(title: "OK", style: .default, handler: { [weak alertViewControllerTextField](action) -> Void in
                print("\(alertViewControllerTextField?.text)")
            })

let cancel = UIAlertAction(title: "Cancel", style: .cancel) { [weak promptController] (action) -> Void in
                //promptController = nil
            }

promptController.addAction(ok)
promptController.addAction(cancel)
promptController.addTextField { (textField) -> Void in
                alertViewControllerTextField = textField
            }
self.present(promptController, animated: true, completion: nil)