使用Swift中的UIAlertController进行内存泄漏

时间:2015-06-05 12:04:12

标签: ios swift memory-leaks instruments uialertcontroller

我使用这个简单的代码

呈现一个简单的UIViewController
@IBAction func addNewFeed(sender: UIBarButtonItem)
{

    var alertView: UIAlertController? = UIAlertController(title: NSLocalizedString("New Feed", comment: "Titolo popup creazione feed"),
        message: NSLocalizedString("Insert the Title and the Link for the new Feed.", comment: "Messaggio creazione nuovo feed"),
        preferredStyle: UIAlertControllerStyle.Alert)


    alertView!.addAction(UIAlertAction(title: NSLocalizedString("Cancel", comment: "Annulla popup creazione nuovo feed"),
        style: UIAlertActionStyle.Cancel,
        handler: nil))

    presentViewController(alertView!, animated: true, completion: nil)

}

当我按下界面上的按钮时,我会调用此IBAction并显示UIAlertController。但当我点击取消按钮解除控制器泄漏工具发现泄漏时,如图所示:

enter image description here

我试过在处理程序参数中添加这样的闭包:

alertView!.addAction(UIAlertAction(title: NSLocalizedString("Cancel", comment: "Annulla popup creazione nuovo feed"),
        style: UIAlertActionStyle.Cancel,
        handler: {[weak self] action in self!.dismissViewControllerAnimated(true, completion: nil)
        alertView = nil
        }))

但总是有泄漏。

1 个答案:

答案 0 :(得分:1)

UIViewController有很多陷阱。

Ash Furrow解决了这个blog post中的许多内存问题。他尝试了弱自我,但决定使用一个局部变量,然后在闭包中使用。