swift - 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)
请帮助我理解为什么会泄漏内存。谢谢!
解决方案
推荐阅读
- ios - Swift 4.2 TableViewCell 以编程方式动态高度
- javascript - 在 Next JS 中使用带有 Typescript 的 sass 模块
- python - Run a function in another function Python
- vuejs2 - VeeValidate - 如果我在其中添加 +,数字输入的长度不起作用
- php - The POST method is not supported for this route. Supported methods: GET, HEAD. Laravel
- php - 如何在控制器 Laravel 中获取 Car_type、Marks 和模型?
- html - Is it possible to put arrows between these flipping circles?
- firebase - Building a REST API, using firebase as a backend
- javascript - VueJS 是否提供某种重定向参数白名单?
- android - AsyncTask 卡住了