返回
类与结构体的初始化和内存管理(Swift进阶02-03)
IOS
2023-11-19 09:15:53
类与结构体的初始化
在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实例被销毁时,它们的析构函数会被自动调用。