Swift - Deinitialization

Trước khi một cá thể lớp cần được phân bổ, 'deinitializer' phải được gọi để phân bổ không gian bộ nhớ. Từ khóa 'deinit' được sử dụng để phân bổ không gian bộ nhớ bị chiếm bởi tài nguyên hệ thống. Deinitialization chỉ có sẵn trên các loại lớp.

Deinitialization để phân bổ không gian bộ nhớ

Swift 4 tự động phân bổ các phiên bản của bạn khi chúng không còn cần thiết để giải phóng tài nguyên. Swift 4 xử lý việc quản lý bộ nhớ của các cá thể thông qua đếm tham chiếu tự động (ARC), như được mô tả trong Đếm tham chiếu tự động. Thông thường, bạn không cần thực hiện dọn dẹp thủ công khi các phiên bản của bạn được phân bổ. Tuy nhiên, khi bạn đang làm việc với tài nguyên của mình, bạn có thể cần phải tự mình thực hiện thêm một số thao tác dọn dẹp. Ví dụ: nếu bạn tạo một lớp tùy chỉnh để mở một tệp và ghi một số dữ liệu vào nó, bạn có thể cần phải đóng tệp trước khi cá thể lớp được phân bổ.

var counter = 0; // for reference counting
class baseclass {
   init() {
      counter++;
   }
   deinit {
      counter--;
   }
}
var print: baseclass? = baseclass()

print(counter)
print = nil
print(counter)

Khi chúng tôi chạy chương trình trên bằng sân chơi, chúng tôi nhận được kết quả sau:

1
0

Khi câu lệnh print = nil bị bỏ qua, các giá trị của bộ đếm vẫn giữ nguyên vì nó không bị khử hóa.

var counter = 0; // for reference counting

class baseclass {
   init() {
      counter++;
   }
   deinit {
      counter--;
   }
}
var print: baseclass? = baseclass()
print(counter)
print(counter)

Khi chúng tôi chạy chương trình trên bằng sân chơi, chúng tôi nhận được kết quả sau:

1
1