ARC – Công nghệ quản lí bộ nhớ hiện đại nhất

Kiến thức của con người là bao la học để biết không biết được bề ngang cũng tràn bề dọc, nhà bạn có giàu bao nhiêu nhưng không biết cách tiêu tiền thì cũng sạt nghiệp, mặc dù là bộ nhớ của phần điện thoại máy tính đang ngày càng được phát triển càng có nhiều dung lượng hơn nhưng cứ tiêu xài hoang phí bộ nhớ thì dẫn đến app rất chậm, lag … Đó là lí do tại sao chúng ta cần phải quản lí bộ nhớ nó cũng như ARC(Automatic Reference Countring) nó chính là kỹ thuật để quyết định xem vùng nhớ vào sẽ được tồn tại và bị lấy đi.Trong bài ngày hôm  này sẽ đề cập đến ARC và cơ chế quản lý bộ nhớ trong Swift.

ARC là gì?

ARC chính là một phương pháp quản lý bộ nhớ trước lúc thực thi chương trình (compile time). Nó không phải chỉ thêm một lệnh vào trong chương trình đang chạy của bạn mà nó đã đưa lệnh vào từ trước khi bạn build chương trình để chạy.Trước đây khi mà ARC chưa được Apple đưa vào Xcode sử dụng thì việc quản lí bộ nhớ thực sự là một khó khăn, là nỗi ác mộng của các lập trình viên . Các lập trình viên khi đó phải quản lí bộ nhớ một cách thủ công , mất rất nhiều thời gian vào việc viết code làm sao để vừa phải quản lí bộ nhớ tốt, vừa phải thực thi tốt việc mà chúng ta muốn làm

Sau này, khi ma ARC được đưa vào sử dụng, chúng ta đã bớt được rất nhiều công việc phải làm, việc quản lý bộ nhớ lúc này đã được xử lý tự động nhờ vào ARC. Tuy nhiên, Objective-C là một ngôn ngữ khá “cũ”, dù không phải lo quản lý bộ nhớ thủ công như trước, chúng ta vẫn phải cẩn thận với code của mình, việc để sảy ra tình trạng memory leaks rất dễ xảy ra với các lập trình viên mới.

Thật may, Swift – một ngôn ngữ bậc cao, mới được Apple giới thiệu trong vài năm trở lại đây để thay thế dần cho ngôn ngữ Objective-C đã cũ. Swift là ngôn ngữ mới, vì thế việc quản lý bộ nhớ trong Swift là rất tốt. Khi sử dụng Swift, chúng ta không cần phải lo nghĩ quá nhiều về memory leak như khi chúng ta sử dụng Objective-C. Tuy nhiên, memory leaks vẫn xảy ra trong Swift, mặc dù với tần suất ít hơn trong Objective-C.

Cách ARC hoạt động

Trong iOS, khi object được khởi tạo, nó sẽ được quản lý bởi ARC. Dựa vào số lượng reference đến mà object đó được gán một số được gọi là Reference counting. Mỗi khi object được reference bởi object khác, số reference counting sẽ tăng thêm, và giảm khi nó không còn được reference đến nữa. Một object sẽ được xoá bỏ và trả lại bộ nhớ cho hệ thống khi nó không còn được reference bởi bất kỳ object nào khác, hay reference counting bằng 0.

Để cho dễ hiểu, chúng ta sẽ đi vào code. Các bạn mở Xcode, tạo một playground project mới và thêm vào đoạn code như sau:

Bên trên, chúng ta viết class User với property name và 2 hàm init(name:) và deinit để in ra message khi object của class User được khởi tạo hay được xoá bỏ.

Nhìn vào giá trị output của playground, chúng ta có thể thấy hàm init(name:) của user1 được gọi, object user1 đã được khởi tạo. Tuy nhiên hàm deinit() không được gọi, bởi vì user1 đã không bị xoá bỏ trong playground. Để xoá bỏ object user1 khi playground chạy hết, chúng ta để đoạn code khởi tạo user1 trong lệnh do:

Lúc này, cả hàm init(name:) và hàm deinit() đều đã được gọi. Object của chúng ta được khởi tạo, và sau đó đã được giải phóng khỏi bộ nhớ như trong sơ đồ sau:

Như sơ đồ trên, chúng ta khởi tạo object của class User và gán cho user1, lúc này reference counting được đánh số 1. Sau khi chạy hết đoạn code “do”, user1 bị xoá, object của class User không còn bất kỳ reference nào, số reference counting là 0 và nó được xoá bỏ bởi ARC, trả lại bộ nhớ cho hệ thống.

Lợi ích khi sử dụng ARC

ARC sẽ tự động giải phóng vùng nhớ của intanve A để dùng cho các instance mới khởi tạo khác, nó sẽ đảm bảo và giúp cho một vùng nhớ khố bị chiếm dụng bởi một instanse nào đó mà instance đó không còn được sử dụng. Nói cách khác sẽ giúp người dùng quản lí được bộ nhớ một cách dễ dàng hơn điều mà trước kia đã là nỗi ác mộng của các lập trình viên khi phải viết code hoàn toàn

Thời đại hiện nay công nghiệp hóa hiện đại hóa phát triển từng ngày, việc quản lý bộ nhớ là thiết yếu hơn bao giờ hết.Trên đây, chúng ta đã tìm hiểu về ARC và cách mà nó hoạt động,lợi ích mà nó mang lại cho chúng ta quan trọng như thế nào. Hi vọng bài viết này sẽ mang lại thông tin bổ ích cho các bạn, đặc biệt là các bạn new dev.

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

1
Bạn cần hỗ trợ?