- Bài 1: Tổng quan ngôn ngữ Swift
- Bài 2: Hướng dẫn cài đặt Xcode và chạy một playground
- Bài 3: Những cú pháp cơ bản trong swift
- Bài 4: Kiểu dữ liệu
- Bài 5: Toán tử trong ngôn ngữ lập trình Swift
- Bài 6: Câu lệnh rẽ nhánh trong swift – Decision Making
- Bài 7: Chuỗi ký tự trong Swift - Character và String
- Bài 8: Vòng lặp trong swift – Loops
- Bài 9: Mảng Array trong swift
- Bài 10: Dictionary trong swift
- Bài 11: Optional trong Swift
- Bài 12: Functions trong swift
- Bài 13: Closure trong swift
- Bài 14: Enumeration trong swift
- Bài 15: Struct trong swift
- Bài 16: Classes trong swift
- Bài 17: Properties trong swift
- Bài 18: Methods trong swift
- Bài 19: Subscripts trong swift
- Bài 20: Inheritance trong swift
- Bài 21: Initialization trong swift
- Bài 22: Deinitialization trong swift
- Bài 23: ARC trong swift
- Bài 24: Type casting trong swift
- Bài 25: Extensions trong swift
- Bài 26: Protocols trong swift
- Bài 27: Generics trong swift
- Bài 28: Access control trong swift
Bài 23: ARC trong swift - Lập trình Swift cơ bản
Đăng bởi: Admin | Lượt xem: 2332 | Chuyên mục: Swift
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.
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!
- Bài 1: Tổng quan ngôn ngữ Swift
- Bài 2: Hướng dẫn cài đặt Xcode và chạy một playground
- Bài 3: Những cú pháp cơ bản trong swift
- Bài 4: Kiểu dữ liệu
- Bài 5: Toán tử trong ngôn ngữ lập trình Swift
- Bài 6: Câu lệnh rẽ nhánh trong swift – Decision Making
- Bài 7: Chuỗi ký tự trong Swift - Character và String
- Bài 8: Vòng lặp trong swift – Loops
- Bài 9: Mảng Array trong swift
- Bài 10: Dictionary trong swift
- Bài 11: Optional trong Swift
- Bài 12: Functions trong swift
- Bài 13: Closure trong swift
- Bài 14: Enumeration trong swift
- Bài 15: Struct trong swift
- Bài 16: Classes trong swift
- Bài 17: Properties trong swift
- Bài 18: Methods trong swift
- Bài 19: Subscripts trong swift
- Bài 20: Inheritance trong swift
- Bài 21: Initialization trong swift
- Bài 22: Deinitialization trong swift
- Bài 23: ARC trong swift
- Bài 24: Type casting trong swift
- Bài 25: Extensions trong swift
- Bài 26: Protocols trong swift
- Bài 27: Generics trong swift
- Bài 28: Access control trong swift