swift - 这些共享课程的方式有什么区别?
问题描述
如果我有一个计算类和一个 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()
}
}
解决方案
推荐阅读
- python - python / pandas - 查找两个数据框之间的公共列,并创建另一个具有相同列的列来显示它们的差异
- apache-kafka - Http 源配置不适用于 Flume
- pycharm - 从 PyCharm 搜索中排除带有模式的文件名
- r - ifelse() 尝试更改值时返回logical(0)
- javascript - 从 CSS 中删除 !important
- sql - 如何删除firebird sql中的多个字符串值?
- vba - 导出 PDF 时 VBA 不是特定的用户名
- html - 添加项目时如何不使div变大但也不更改最大高度
- c - 整数到无效 * ?什么是最好的方法
- reactjs - 如何在 iframe 中添加反应组件?