许多SWIFT初始值设定项返回非可选对象.这意味着不可能是nil
岁,而且总是成功的.然而,在幕后,SWIFT必须分配内存,内存分配一般都有失败的可能.例如,应判断C函数malloc()
返回的内存是否为NULL
.
- SWIFT如何/为什么可以保证对象内存分配将成功,正如非可选的初始值设定项返回所暗示的那样?
- 如果我try 实例化minuscule but nonzero chance%和out of memory%的系统中的Swift对象会发生什么?
许多SWIFT初始值设定项返回非可选对象.这意味着不可能是nil
岁,而且总是成功的.然而,在幕后,SWIFT必须分配内存,内存分配一般都有失败的可能.例如,应判断C函数malloc()
返回的内存是否为NULL
.
你会问:
SWIFT如何/为什么可以保证对象内存分配将成功,正如非可选的初始值设定项返回所暗示的那样?
它不能.
如果我try 在系统内存不足的极小但非零的可能性中实例化一个Swift对象,会发生什么?
一般来说,它只会崩溃.
幸运的是,应用程序通常会在达到这一点之前收到内存警告(至少如果应用程序消耗内存的速度足够慢,以便操作系统有机会提供警告).因此,应用程序通常有机会在一切变得糟糕之前释放一些内存.暂停的应用程序也可能会被丢弃,以释放一些内存.
但SWIFT并没有优雅地处理这些退化的情况.我们经常被困在crash reports,而不是memory related crashes.当我们有内存问题时,它们通常表现为不一致的错误(即,不总是同一行代码),但identify the source of the problem有一些技巧.我们还经常使用Instruments定期"分析"我们的应用程序,以确定内存问题.