【问题标题】:Memory leak in Twitter and Fabric - SwiftTwitter 和 Fabric 中的内存泄漏 - Swift
【发布时间】:2016-12-15 19:12:21
【问题描述】:

当我关闭它时,我的模态登录窗口正常释放,直到我通过 Fabric 添加 Twitter Kit 登录按钮。

import TwitterKit

// UIview that I have in my login view controller
@IBOutlet weak var twitterLoginView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Twitter integration
    let twitterLogInButton = TWTRLogInButton { (session, error) in
        if let unwrappedSession = session {
            let alert = UIAlertController(title: "Logged In",
                message: "User \(unwrappedSession.userName) has logged in",
                preferredStyle: UIAlertControllerStyle.Alert
            )
            alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
            self.presentViewController(alert, animated: true, completion: nil)
        } else {
            NSLog("Login error: %@", error!.localizedDescription);
        }
    }
    // add to twitter UIView
    twitterLoginView.addSubview(twitterLogInButton)

}

我认为有一个保留周期,但他们建议的代码或多或少,我不知道如何解决这个问题。即使我不按 twitter 按钮,而只是关闭登录窗口,登录窗口也不会解除分配,因此添加按钮的行为会导致问题。删除 twitter 按钮,它就会解除分配。有什么想法吗?

【问题讨论】:

    标签: ios swift twitter memory-leaks twitter-fabric


    【解决方案1】:

    可能是因为闭包中的自实例捕获。尝试使用弱自我:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        // Twitter integration
        let twitterLogInButton = TWTRLogInButton { [weak self] (session, error) in
            guard let s = self else {return}
            if let unwrappedSession = session {
                let alert = UIAlertController(title: "Logged In",
                    message: "User \(unwrappedSession.userName) has logged in",
                    preferredStyle: .Alert
                )
                alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
                s.presentViewController(alert, animated: true, completion: nil)
            } else {
                NSLog("Login error: %@", error!.localizedDescription);
            }
        }
        // add to twitter UIView
        twitterLoginView.addSubview(twitterLogInButton)
    }
    

    【讨论】:

    • guard 语句允许 s 是可选的。我的登录窗口现在解除分配。谢谢。
    猜你喜欢
    • 2012-02-06
    • 2020-03-19
    • 2017-11-25
    • 2015-11-04
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 2015-02-21
    相关资源
    最近更新 更多