Bài 23: ARC trong swift – Lập trình Swift cơ bản

Trang chủ » Training » Bài 23: ARC trong swift – Lập trình Swift cơ bản
01/03/2022 Training 110 viewed

ARC (Automatic Reference Counting) là gì?

Bạn có thể hiểu ARC là một hệ thống quản lý đã được tích hợp sẵn mà bạn hoàn toàn không phải làm gì trong ngôn ngữ lập trình Swift của Apple.
Từ Automatic( tự động hóa) đã nói lên tất cả điều này, hệ thống tự động quản lý memory bằng việc đếm số lượng tham chiếu.

Lý do ARC làm như vậy?

Thông thường, để tham chiếu đến một instance mà vùng memory thì lập trình viên sẽ rất dễ sử dụng một variable, constant hay một property nào đó sẽ gây ra hiện tượng crash app.
Vì vậy để đảm bảo những điều sau mà chúng ta cần phải đếm số lượng các reference tới instance đó ( hay còn được gọi là reference counts)
  • nếu còn ít nhất một variable, constant hoặc property tham chiếu đến instance đó thì nó không bị giải phóng.
  • vậy nếu ko còn thằng nào tham chiếu đến nữa (reference counts = 0) thì ARC sẽ giải phóng memory được sử dụng bởi instance ngay lập tức.
Và bất cứ khi nào gán một instance của class vào một property, variable hay constant thì property, variable,  constant này sẽ tạo ra một strong references (tham chiếu mạnh) tới instance đó.

Strong reference

Strong reference được hiểu là tham chiếu mạnh, tức là bạn phải tự đi phá tham chiếu bằng tay bằng cách gán variable = nil
Để hiểu hơn phần này, bạn hãy tìm hiểu về memory leak.
ví dụ nhé (dùng của Apple luôn):
full example: Ta có một class Person
class Person {

 let name: String

 init(name: String) {

   self.name = name

   print("\(name) is being initialized")

 }

 deinit {

   print("\(name) is being deinitialized")

 }

}
tạo một instance của class này và gán ngay vào variable reference1:
var reference1 = Person(name: "John Appleseed")

// output: "John Appleseed is being initialized"
tạo ra 2 variable nữa
var reference2: Person?

var reference3: Person?
cho 2 variable này tham chiếu đến instance kia:
reference2 = reference1

reference3 = reference1
Ở ví dụ trên, cả 3 variable đang cùng tham chiếu tới một instance của class Person. và tất nhiên reference counts = 3. chúng ta đang có 3 strong references.
Vậy muốn giải phóng memory bị giữ bởi instance đó, ta cần:
reference1 = nil // reference counts = 2

reference2 = nil // reference counts = 1

reference3 = nil // reference counts = 0

// output: “John Appleseed is being deinitialized”
Summary
  • ARC quản lý memory sử dụng bởi reference type.
  • ARC giải phóng memory khi reference counts = 0.
Những bước cần làm để reference counts = 0.
  • Gán instance of class vào variable/constant/property chính là  tạo ra 1 strong reference.
Chia sẻ:
Tags:
TOP HOME