Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 内存使用:全局变量_Swift_Memory - Fatal编程技术网

Swift 内存使用:全局变量

Swift 内存使用:全局变量,swift,memory,Swift,Memory,我正在编写一个应用程序,需要访问来自所有类和方法的一组信息。 我的问题是,为了最大限度地减少内存使用,最有效的方法是什么 我自学过编码,当然,在网上搜索时,我遇到了许多不同的方法来解决这个问题。例如: 我可以创建一个全局变量,比如var info=…,我会将它放在类定义之上,这样就可以从应用程序中的任何地方进行访问 或者我可以创建一个单件,GameData,并将数据存储在那里,例如GameData.shared.info,同样可以从应用程序中的任何位置获得 或者我可以在第一个ViewContro

我正在编写一个应用程序,需要访问来自所有类和方法的一组信息。 我的问题是,为了最大限度地减少内存使用,最有效的方法是什么

我自学过编码,当然,在网上搜索时,我遇到了许多不同的方法来解决这个问题。例如:

我可以创建一个全局变量,比如
var info=…
,我会将它放在类定义之上,这样就可以从应用程序中的任何地方进行访问

或者我可以创建一个单件,
GameData
,并将数据存储在那里,例如
GameData.shared.info
,同样可以从应用程序中的任何位置获得

或者我可以在第一个
ViewController
中加载信息,然后将其作为参数传递

毫无疑问,我还没有遇到更多的方法,但我想知道哪种方法是最有效的内存方法,如果真的有这样的方法的话。在我的例子中,我不需要访问大量的数据——不超过60或70条记录,每个记录有半打文本或数字字段


非常感谢

使用依赖项注入,即将其作为参数传递给任何需要它的对象,这将是更节省内存的方法,因为如果要替换整个层次结构(只要操作正确),变量将“自动”停止存在

通过使用单例变量或全局变量,您必须自己清除该值


如果该值在应用程序的生命周期内不会消失,那么内存使用就无关紧要,但我仍然建议不要使用全局变量,并建议使用依赖项注入。

但是如果将相同的数据注入多个对象,那么如果它是一个类,那么内存消耗就会高得多,您将传递引用。如果是值类型,Swift将使用“写时复制”,但您可能不会对值类型使用依赖项注入。数据需要在应用的整个生命周期内访问,因此只有在应用关闭后才会清除。所以,我将继续我的单例方法。谢谢。我当然同意依赖注入通常是最好的解决方案,但它使全局数据解决方案过于复杂。我真的不明白为什么structs不能用于依赖注入。我并不奇怪这是投票结束基于意见的原因,但我相信问三种存储方法中哪一种更有效,不是基于意见的(即使答案是只要对象的寿命相同,内存消耗量也一样)。@EmilioPelaez基于观点、依赖于用例或者仅仅是一个过于宽泛的问题都是结束这个问题的有效原因,我想问“存储这些值的三种方法中哪一种更有效?”我觉得很简洁