Swift - ARC 概述
-
简述
内存管理功能及其使用通过自动引用计数 (ARC) 以 Swift 4 语言处理。ARC 用于初始化和取消初始化系统资源,从而在不再需要类实例时释放类实例使用的内存空间。ARC 跟踪有关我们代码实例之间关系的信息,以有效地管理内存资源。 -
ARC的功能
-
每次通过 init() 创建新的类实例时,ARC 都会分配一块内存来存储信息。
-
有关实例类型及其值的信息存储在内存中。
-
当不再需要类实例时,它会通过 deinit() 自动释放内存空间,以便进一步存储和检索类实例。
-
ARC 跟踪当前引用的类实例属性、常量和变量,以便 deinit() 仅应用于那些未使用的实例。
-
ARC 维护对那些类实例属性、常量和变量的“强引用”,以在当前使用类实例时限制释放。
-
-
ARC计划
当我们使用操场运行上述程序时,我们得到以下结果 - -
ARC 强引用循环类实例
当我们使用操场运行上述程序时,我们得到以下结果 - -
ARC 弱引用和无主引用
类类型属性有两种解决强引用循环的方法 -- 弱引用
- 无主引用
这些引用用于使一个实例能够在引用循环中引用其他实例。然后实例可能会引用每个实例而不是关心强引用循环。当用户知道某个实例可能返回“nil”值时,我们可以使用弱引用来指出这一点。当实例要返回一些东西而不是 nil 时,然后用无主引用声明它。弱参考程序
当我们使用操场运行上述程序时,我们得到以下结果 -无主参考程序
当我们使用操场运行上述程序时,我们得到以下结果 - -
关闭的强参考周期
当我们将闭包分配给类实例属性和闭包主体以捕获特定实例时,可能会发生强引用循环。对闭包的强引用由“self.someProperty”或“self.someMethod()”定义。强引用循环用作闭包的引用类型。当我们使用操场运行上述程序时,我们得到以下结果 - -
弱引用和无主引用
当闭包和实例相互引用时,用户可以将闭包中的捕获定义为无主引用。然后它不会允许用户同时释放实例。当实例有时返回一个 'nil' 值时,用弱实例定义闭包。当我们使用操场运行上述程序时,我们得到以下结果 -