首页 > 解决方案 > UIView 过渡动画内存泄漏

问题描述

请帮我修复我不明白的内存泄漏。我有一个在两个图像之间转换的自定义 UIButton 子类。

class SettingsButton: OMGButton {

var settingsButtonTimer: Timer?

enum SettingsButtonImage: String {
    case Gears
    case Person = "Add Person"
}

var transitioning: Bool = false

var currentButtonImage: SettingsButtonImage = .Gears {
    didSet {
        self.handleImageChange()
    }
}

override func configure() {
    super.configure()
    self.settingsButtonTimer = Timer.scheduledTimer(timeInterval: 15, target: self, selector: #selector(changeImage), userInfo: nil, repeats: true)
}

@objc func changeImage() {
    if self.currentButtonImage == .Gears {
        self.currentButtonImage = .Person
    } else {
        self.currentButtonImage = .Gears
    }
}

func handleImageChange() {
    if !self.transitioning {
        UIView.transition(with: self, duration: 1.5, options: [.beginFromCurrentState, .transitionCrossDissolve], animations: { [unowned self] in
            self.transitioning = true

            // setImage is leaking memory on each transition

            self.setImage(UIImage(named: self.currentButtonImage.rawValue), for: .normal)

        }, completion: { _ in
            self.transitioning = false
        })
    }
}

}

handleImageChange() 方法正在泄漏内存 - 特别是它显示它在我设置图像的行上泄漏:

self.setImage(UIImage(named: self.currentButtonImage.rawValue), for: .normal)

请帮助我理解为什么会泄漏内存。谢谢!

标签: swiftuiviewmemory-leaks

解决方案


推荐阅读