返回

类与结构体的初始化和内存管理(Swift进阶02-03)

IOS

类与结构体的初始化

在Swift中,类和结构体都可以通过初始化来创建实例。初始化过程是为新创建的实例分配内存并设置其属性值。

类的初始化可以通过init来实现,结构体的初始化可以通过init(parameters)关键字来实现。

构造函数可以有不同的参数列表,并且可以重载。这意味着我们可以为一个类或结构体定义多个不同的构造函数,每个构造函数都有自己的参数列表。

当我们创建类的实例时,需要使用类的构造函数。当我们创建结构体的实例时,可以使用结构体的构造函数或结构体的成员初始化器。

成员初始化器是一种特殊类型的构造函数,它只能在结构体中使用。成员初始化器不需要使用init关键字,它直接使用结构体类型的名称来初始化实例。

内存管理

Swift中的内存管理是自动的,这意味着编译器会自动跟踪内存的使用情况,并在不再需要时释放内存。

引用计数是Swift中内存管理的基础。每个对象都有一个引用计数,表示有多少个变量或常量引用了该对象。当一个变量或常量不再引用对象时,对象的引用计数就会减少。当对象的引用计数为零时,该对象就会被释放。

析构函数

析构函数是一种特殊类型的成员函数,它在对象被销毁时自动调用。析构函数可以用来释放对象的资源,例如关闭文件或断开网络连接。

析构函数的名称是deinit,它没有参数。

示例代码

class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    deinit {
        print("Person \(name) is being destroyed.")
    }
}

struct Student {
    var name: String
    var grade: Int

    init(name: String, grade: Int) {
        self.name = name
        self.grade = grade
    }
}

var person = Person(name: "John Doe", age: 20)
var student = Student(name: "Jane Doe", grade: 9)

print("Person's name is \(person.name) and age is \(person.age).")
print("Student's name is \(student.name) and grade is \(student.grade).")

person = nil
student = nil

这段代码创建了一个Person类的实例和一个Student结构体的实例。然后,它打印这两个实例的属性值。最后,它将这两个实例设置为nil,导致它们被销毁。当Person和Student实例被销毁时,它们的析构函数会被自动调用。