我有一个非常简单的项目:只有一个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的其中一个按钮时,有什么方法可以减少内存使用量吗?
答案 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)