📜  Swift – 去初始化及其工作原理?

📅  最后修改于: 2022-05-13 01:55:14.194000             🧑  作者: Mango

Swift – 去初始化及其工作原理?

取消初始化是释放内存空间的过程,这意味着当我们完成任何内存的工作时,我们将删除指向该内存的指针,以便内存可以用于其他目的。换句话说,它是释放未使用的类案例对象所涉及的未使用空间以更好地记忆执行者的循环。它们通常只能通过类类型访问,因此我们可以轻松利用反初始化器并整理未使用的类出现对象。一个类中几乎可以有一个反初始化器,并且它不带任何参数。在类实例被释放之前立即调用的去初始化过程。我们可以使用 deinit 关键字开始反初始化。 deinit 是 Swift 中用于释放内存的预定义关键字。在 deinit 中,我们可以编写我们的代码。

句法:

去初始化的工作

Swift 通过在不再需要时释放我们的实例来自动释放使用的资源。它通过程序引用计数或ARC(也称为自动引用计数)来处理事件执行者的内存。当我们的案例被解除分配时,我们不必进行任何手动清理。当我们通常不期望它们释放内存资产时,快速自然地释放我们的场合。尽管如此,当我们使用自己的资产时,我们可能需要进行一些额外的清理工作。在 Swift 中,我们不必在物理上调用 deinitializers,它们会在释放前不久自然调用。假设我们在一个类中描述了一个反初始化器,它可以获取每个属性并可以改变属性的行为。直到调用了特征化的反初始化器,类对象案例才会释放。

去初始化器是自然调用的,不久就发生了释放分配。超类反初始化器由它们自己的子类继承,并且在子类反初始化器实现结束时,会自动调用超类反初始化器。即使子类不拥有其反初始化器,也始终调用超类的反初始化器。如果出现这样的情况,即使调用了它的去初始化器,空间也没有释放,那么去初始化器会获取它接近的事件的属性,并根据这些属性改变自己以释放内存。

示例 1:在下面的示例中,我们使用 10 初始化了一个变量,后者在类初始化期间将其增加 10。之后,我们打印了它的值,然后我们将我们的类对象指向 null 并再次打印了变量的值。当我们第一次打印变量的值时,我们得到 20 作为输出,但在取消初始化之后,我们得到 0 作为输出。

Swift
// Swift program to illustrate deinitialization 
// Initialize a variable x with value 10
var x = 10
  
// Create a class
class deinitGfg 
{
  
    // Initialize
    init() 
    {
        x = x + 10
    }
      
    // Deinitialization  x to 0
    deinit 
    {
        x = 0
    }
}
  
// Created an instance of class 
var obj: deinitGfg? = deinitGfg()
  
print("Value of x before deinit = \(x)")
obj = nil
print("Value of x after deinit = \(x)")


Swift
// Swift program to illustrate deinitialization 
  
// Create a class
class Gfg 
{
    var x: Int
      
    // define initializer
    init() 
    {
        x = 5
        print("Memory Initialized for variable x")
    }
      
    // define deinitializer
    deinit 
    {
        print("Memory Deinitialized")
    }
}
  
// Create an instance of class
var ob: Gfg? = Gfg()
  
// Deallocate object
ob = nil


输出:

Value of x before deinit = 20
Value of x after deinit = 0

示例 2:在此示例中,我们在 Gfg 类中创建了一个反初始化器。然后,我们创建了一个 Gfg 类的实例,并将它分配给一个名为 ob 的 Gfg 类型变量。然后我们将 nil 分配给 ob ,它将释放内存。

迅速

// Swift program to illustrate deinitialization 
  
// Create a class
class Gfg 
{
    var x: Int
      
    // define initializer
    init() 
    {
        x = 5
        print("Memory Initialized for variable x")
    }
      
    // define deinitializer
    deinit 
    {
        print("Memory Deinitialized")
    }
}
  
// Create an instance of class
var ob: Gfg? = Gfg()
  
// Deallocate object
ob = nil

输出:

Memory Initialized for variable x
Memory Deinitialized