许多SWIFT初始值设定项返回非可选对象.这意味着不可能是nil岁,而且总是成功的.然而,在幕后,SWIFT必须分配内存,内存分配一般都有失败的可能.例如,应判断C函数malloc()返回的内存是否为NULL.

  • SWIFT如何/为什么可以保证对象内存分配将成功,正如非可选的初始值设定项返回所暗示的那样?
  • 如果我try 实例化minuscule but nonzero chance%和out of memory%的系统中的Swift对象会发生什么?

推荐答案

你会问:

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

它不能.

如果我try 在系统内存不足的极小但非零的可能性中实例化一个Swift对象,会发生什么?

一般来说,它只会崩溃.

幸运的是,应用程序通常会在达到这一点之前收到内存警告(至少如果应用程序消耗内存的速度足够慢,以便操作系统有机会提供警告).因此,应用程序通常有机会在一切变得糟糕之前释放一些内存.暂停的应用程序也可能会被丢弃,以释放一些内存.

但SWIFT并没有优雅地处理这些退化的情况.我们经常被困在crash reports,而不是memory related crashes.当我们有内存问题时,它们通常表现为不一致的错误(即,不总是同一行代码),但identify the source of the problem有一些技巧.我们还经常使用Instruments定期"分析"我们的应用程序,以确定内存问题.

Swift相关问答推荐

TabView中的视频播放器意外播放

如何在SWIFT中使用DiscardingTaskGroup获得任务结果

如何使用变量 Select 哪个向量(?)在我的 struct 中密谋吗?

String.Index encodedOffset已弃用,但建议的替代方案不起作用

可选,类似于自定义类型的初始化

是否可以使用一个 NSRegularExpression 同时判断字符串格式并提取子字符串?

如何使用可搜索在搜索栏中搜索包括>或<?

OSX 中的 Popover 无法确定透明度

在 SwiftUI 中禁用 Select 器选项

macOS 的窗口框架中使用的真实类型和真实类型是什么?

从 actor 的 init 方法调用方法

LeetCode 249. 分组移位字符串

如何从另一个 swift 文件中调用函数

如何在填充上添加 if else 语句? SwiftUI

SwiftUI:当先前的视图列表更改时,NavigationView 详细视图会弹出回栈

自动布局:获取 UIImageView 高度以正确计算单元格高度

在 unwind segue 之后执行 push segue

应用程序包不包含有效标识符

swift - 我可以从我的自定义初始化方法中调用 struct 默认成员初始化吗?

Switch 语句中的字符串:String不符合协议IntervalType