gpt4 book ai didi

ios - ViewController 没有取消

转载 作者:行者123 更新时间:2023-11-28 14:34:08 25 4
gpt4 key购买 nike

我有一个 FakeSplashController;

  1. ) 发起网络请求并等待结果
  2. ) 显示动画然后打开 SeconViewController

某些东西阻止了这个 ViewController 被释放并且 deinit 函数没有被调用。

此外,AppInitService 有一个静态函数,它在这个 SplashController 中被调用。我还尝试将 [weak self] 添加到网络请求中。但是,它也没有解决问题。

class SplashViewController: UIViewController {

let logoImage: UIImageView = {
let imageView = UIImageView()
imageView.image = UIImage(named: "logo")
imageView.contentMode = .scaleAspectFit

return imageView
}()

let textLogo: UIImageView = {
let imageView = UIImageView()
imageView.image = UIImage(named: "text-logo")
imageView.contentMode = .scaleAspectFit
return imageView
}()

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
setupUI()
networkRequests()

}

func networkRequests(){

AppInitService().initAppRequest { [](result) in
switch result{
case .success(_):
self.startAnimation()
return
case .error(let error):
UIControlUtil.showErrorMessage(title: error.title, message: error.message, closeButton: true)
return
}
}
}

func openApp(){
let loginController = WelcomeViewController()
guard let window = UIApplication.shared.keyWindow else {
return
}
window.rootViewController = loginController
}

func startAnimation(){
UIView.animate(withDuration: 0.8, animations: {
self.logoImage.frame.origin.x -= 100
}, completion: nil)
UIView.animate(withDuration: 1,delay: 0.3,animations: {
self.textLogo.alpha = 1
self.textLogo.frame.origin.x += 50
}, completion: { _ in
self.openApp()
})
}

deinit {
print("Splash Deinited")
}
func setupUI(){
self.view.backgroundColor = Color.NavigationBar.tintColor
logoImage.frame = CGRect(x: 0, y: 0, width: 80, height: 80)
logoImage.center = self.view.center
self.view.addSubview(logoImage)
textLogo.frame = CGRect(x: 0,y: 0, width: 195, height: 80)
textLogo.center = self.view.center
textLogo.frame.origin.x -= 20
self.view.addSubview(textLogo)
textLogo.alpha = 0
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

最佳答案

您正在捕获此 block 中的 self...

func networkRequests(){    
AppInitService().initAppRequest { result in
switch result{
case .success(_):
self.startAnimation() // HERE BE DRAGONS!
return
case .error(let error):
UIControlUtil.showErrorMessage(title: error.title, message: error.message, closeButton: true)
return
}
}
}

这是导致内存泄漏的潜在原因。

您可以通过将其更新为...来确保不会捕获 self

func networkRequests(){
AppInitService().initAppRequest { [weak self] (result) in
switch result{
case .success(_):
self?.startAnimation()
return
case .error(let error):
UIControlUtil.showErrorMessage(title: error.title, message: error.message, closeButton: true)
return
}
}
}

关于ios - ViewController 没有取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51021968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com