如果Swift不能分配内存,会发生什么



许多Swift初始化程序返回非可选对象。这意味着它们不可能是nil,并且总是成功的。然而,在幕后,Swift以某种方式分配内存,通常内存分配失败是可能的。例如,应该检查C函数malloc()返回的内存中的NULL

  • Swift如何/为什么能保证对象内存分配成功,正如非可选初始值设定项返回所暗示的那样
  • 如果我试图在内存不足的极小但非零的机会中实例化Swift对象,会发生什么

您询问:

Swift如何/为什么能保证对象内存分配成功,正如非可选初始值设定项返回所暗示的那样?

不能。

如果我试图实例化Swift对象,而系统内存不足的可能性很小,但不是零,会发生什么?

一般来说,它只会崩溃。

幸运的是,应用程序通常会在到达该点之前收到内存警告(至少如果应用程序消耗内存的速度足够慢,操作系统有机会发出警告(。因此,应用程序通常有机会在一切恶化之前释放一点内存。暂停的应用程序可能也会被丢弃,以释放一点内存。

但斯威夫特并没有优雅地处理这些退化的场景。我们经常被困在查看崩溃报告,寻找与内存相关的崩溃。当我们遇到内存问题时,它们通常表现为不一致的错误(即,不总是同一行代码(,但也有一些技巧可以识别问题的根源。我们还经常使用Instruments定期"评测"我们的应用程序,以识别内存问题。

最新更新