【问题标题】:Memory usage: global variables内存使用:全局变量
【发布时间】:2021-05-16 03:18:20
【问题描述】:

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

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

我可以创建一个全局变量,例如 var info = ...,我会将其放在类定义之上,从而可以从应用程序的任何位置进行访问。

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

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

毫无疑问还有更多我没有遇到过的方法,但我想知道哪种方法最节省内存,如果确实有这样的事情。就我而言,我不需要访问大量数据 - 不超过 60 或 70 条记录,每条记录有六个文本或数字字段。

非常感谢

【问题讨论】:

  • 我并不惊讶这被投票关闭基于意见的原因,但我相信询问三种存储方法中哪一种更节省内存不是基于意见(即使答案就是只要对象的寿命是一样的,内存消耗是一样的)。
  • @EmilioPelaez 基于意见、依赖于用例或只是一个广泛的问题都是关闭这个问题的正当理由 imo
  • “这三种存储这些值的方法中哪一种更节省内存”对我来说似乎很简洁????‍♂️

标签: swift memory


【解决方案1】:

使用依赖注入,也就是说,将它作为参数传递给任何需要它的对象,将是更注重内存的方法,因为如果你要替换整个层次结构,变量将“自动”停止存在(只要因为它做得正确)。

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

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

【讨论】:

  • 但是如果你将相同的数据注入到多个对象中,那么你的内存消耗会高很多
  • 如果它是一个类,你将传递引用。如果它是一个值类型,Swift 将使用“Copy-on-Write”,但你可能不会对值类型使用依赖注入。
  • 数据需要在应用程序的整个生命周期内被访问,因此只有在应用程序关闭后才会被清除。所以,我将继续我的单例方法。谢谢。
  • 嗯,我当然同意依赖注入通常是最好的解决方案,但它使全局数据解决方案过于复杂。而且我真的不明白为什么结构不能用于依赖注入。
猜你喜欢
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
  • 1970-01-01
相关资源
最近更新 更多