首页 > 解决方案 > 这些共享课程的方式有什么区别?

问题描述

如果我有一个计算类和一个 SpriteKit 类。计算类使用 SpriteKit 类的阶跃函数进行更新。我还使用 MyAnimation 视图的路径计算。

这些初始化之间有什么区别,因为我认为我正在初始化的类与 GameScene 和 ContentView (引用类型?)共享。如果我比较这些,我会在第一个示例中随着时间的推移获得更高的内存增长。我不知道为什么会这样。有人有想法吗?

第一的:


struct ContentView: View {

    @ObservedObject var calculations: Calc //<- is a class
    var scene: GameScene //<- is a class

    init(){
       let hereCalc = Calc()
       scene = GameScene(calc: hereCalc)
       calculations = hereCalc
    }

    var body: some View{
         ZStack{
           SpriteView(scene: scene)
           MyAnimation(calc: calculations) //<- is a Path which is redrawn if Calc changes
         }
    }
}


class GameScene: SKScene,ObservableObject{

    var myCalc: Calc   //<- is a class
    
    init(calc: Calc){
        myCalc = calc
    }

    override func update(_ currentTime: TimeInterval) {
        myCalc.step()
    }
}

第二:

struct ContentView: View {
    
    @ObservedObject var scene: GameScene //<- is a class

    init(){
       scene = GameScene()
    }

    var body: some View{
         ZStack{
           SpriteView(scene: scene)
           MyAnimation(calc: scene.myCalc) //<- is a Path which is redrawn if Calc changes
         }
    }
}


class GameScene: SKScene,ObservableObject{

    @Published var myCalc: Calc   //<- is a class
    
    init(calc: Calc){
        myCalc = Calc()
    }

    override func update(_ currentTime: TimeInterval) {
        myCalc.step()
    }
}

标签: swiftswiftui

解决方案


推荐阅读