返回

ios-UIViewControllerRepresentable反复实例化视图控制器

发布时间:2022-03-18 18:33:52 552
# android

我是iOS开发新手。在用Java在Android上开发了一款应用程序后,我决定在iOS上开发,然而,我几乎立刻就开始面临内存泄漏的问题。。。所以,我制作了一个带有故事板的ViewController,并试图通过点击按钮在SwiftUI视图中显示它。代表性:

import UIKit
import SwiftUI

struct StartTraining: UIViewControllerRepresentable{
 
    func makeUIViewController(context: UIViewControllerRepresentableContext) -> UIViewController {
        
        let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
       let controller = storyboard.instantiateViewController(identifier: "StartTraining")
    
        return controller
    }
    
    func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext) {
      //I'm not updating anything, I just need to show the ViewController and everything will be done there
    }
 

   
}


SwiftUI视图:

struct WorkoutDescriptionView: View {
    @State private var isPresented = false

  var body: some View {
    
                Button(action: {
                    self.isPresented = true
                    
                }, label: {
                    Text("Start")
                        .bold()
                        .font(.title2)
                        .frame(width: 350, height: 50)
                        .background(Color.green)
                        .foregroundColor(.white)
                        .cornerRadius(10)
                })
                    .padding(.bottom).fullScreenCover(isPresented:$isPresented){
                        StartTraining().ignoresSafeArea()
                        
                       
                    }
                }

而且很有效!当我点击按钮时,我确实可以看到ViewController全屏显示,然而,ViewController中确实发生了很多事情,一旦我点击,内存使用量增加了200 MB,当我想返回到在ViewController中点击按钮时以SwiftUI编写的主菜单时,只释放了20 MB的内存使用量,你可以看到这是怎么回事:每次连续点击打开ViewController,内存使用量都会增加200MB甚至更多,而不会被释放。

要从ViewController返回主菜单:

 @objc func didTapButton(){
        
ViewController.updateFirebaseValues()
        ViewController.camera.stop()
       
        if #available(iOS 14.0, *) {
            
            let vc = UIHostingController(rootView: ContentView())
            vc.modalPresentationStyle = .fullScreen
           
            present(vc, animated: true, completion: nil)
            
 //           self.presentingViewController?.dismiss(animated: true, completion: nil)
           
            
            
        } else {
            // Fallback on earlier versions
        }
       
      
        
    }
    

我认为问题在于我不断地从故事板实例化新的视图控制器,并在点击按钮时显示它们,而不删除以前创建的视图控制器。在这里:

   func makeUIViewController(context: UIViewControllerRepresentableContext) -> UIViewController {

        let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
       let controller = storyboard.instantiateViewController(identifier: "StartTraining")

        return controller
    }

所以我的问题是:在关闭视图控制器并返回SwiftUI视图时,从switui视图打开uikit视图控制器并释放所有内存的最佳做法是什么?

非常感谢!

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像
下一篇
go-GoLang-为什么登录到stdin有效? 2022-03-18 17:40:11