我构建了 UIButton 类的扩展来执行淡出操作。当我使用它时,我在分析器中收到内存泄漏警告。我正在使用 Swift 4 和 Xcode 9.3。
预先感谢您的帮助。
extension UIButton {
func fadeOut() {
let fadeOut = CABasicAnimation(keyPath: "opacity")
fadeOut.duration = 0.35
fadeOut.fromValue = 1
fadeOut.toValue = 0.0
fadeOut.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
fadeOut.autoreverses = false
fadeOut.repeatCount = 0
fadeOut.isRemovedOnCompletion = true
self.layer.add(fadeOut, forKey: nil)
}
}
调用函数如下。另请注意:new、level 和card 都是UIButtons。当我在下面的函数中注释掉 button.fadeout()
时,内存泄漏就会根据 Xcode 分析器消失。希望这能提供更多背景信息。如果需要任何其他信息来帮助分析,我很乐意提供该信息。
private func menu_fadeout(){
func menu_fadeout_helper(_ button:UIButton){
button.fadeOut()
button.isHidden = true
button.isEnabled = false
}
menu_fadeout_helper(hint)
menu_fadeout_helper(new)
menu_fadeout_helper(level)
menu_fadeout_helper(card)
}
最佳答案
盯着代码几分钟后,我发现了问题。在你的函数中。 。 .
private func menu_fadeout(){
func menu_fadeout_helper(_ button:UIButton){
button.fadeOut()
button.isHidden = true
button.isEnabled = false
}
menu_fadeout_helper(hint)
menu_fadeout_helper(new)
menu_fadeout_helper(level)
menu_fadeout_helper(card)
}
。 。你永远不会直接引用 UIButtons 提示、新的、级别和卡片。最终,在多次按下按钮后,内存将被填满,您的应用程序将崩溃。 (或更糟)
将函数更改为此(据说)可以消除内存泄漏。
private func menu_fadeout(){
func menu_fadeout_helper(_ button: UIButton) -> UIButton {
button.fadeOut()
button.isHidden = true
button.isEnabled = false
return button
}
menu_fadeout_helper(self.hint)
menu_fadeout_helper(self.new)
menu_fadeout_helper(self.level)
menu_fadeout_helper(self.card)
}
关于swift - swift4 中用于淡出动画的 UIButton 扩展中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50481882/