使用全局变量在ViewController之间传递数据的缺点是什么?

时间:2019-04-08 12:21:09

标签: ios swift

我是Swift的新手,来自C和Java背景。

我正在尝试将一个结构(称为“播放器”)对象从一个视图控制器传递给另一个,而据我了解,一种正确的方法是首先在目标VC中定义它,例如:

class TargetVC: UIViewController {

     var playerVar: Player!
}

然后在源VC内的prepare函数中分配它:

 if let targetVC = segue.destination as? TargetVC 
    {
        targetVC.playerVar = myPlayer
    }

但是我想到了简单地使用全局变量通过将Player对象传递给目标视图控制器,方法是将其定义如下:

var myPlayer = Player() // Global Variable

class SourceVC: UIViewController {

}

然后在目标VC中达到它:

class TargetVC: UIViewController {

     myPlayer.name =  // Stuff
}

此方法会在运行时引起任何问题还是有缺点?如果是,那是什么?

谢谢。

2 个答案:

答案 0 :(得分:0)

一个缺点是,顾名思义,所有东西都可以访问全局变量,即使是没有理由要查看的东西,更不用说修改数据了。

答案 1 :(得分:0)

Passing data使您即使在示例中也可以遵循编程原则来构建良好的类。在许多情况下,它使类更可扩展和可重用。

Global var在获取所需数据方面具有一些优势,但是您必须关心reference cyclesmemory managing,处理threadsqueues和{{1 }}等

您还可以阅读有关blockssingletones,...的信息–您可以在其中从类范围变量中获取一些数据。