Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Sự khác biệt giữa việc sử dụng yếu và mạnh trong MVVMCROSS là gì


Sự khác biệt giữa việc sử dụng yếu và mạnh trong MVVMCROSS là gì


Trong MVVMcross, như trong các khung khác, sự lựa chọn giữa việc sử dụng yếu và mạnh là rất quan trọng để quản lý bộ nhớ và ngăn chặn rò rỉ bộ nhớ. Dưới đây là một lời giải thích chi tiết về sự khác biệt và cách chúng áp dụng trong bối cảnh của MVVMCROSS:

Tài liệu tham khảo mạnh mẽ

** Tài liệu tham khảo mạnh là loại tham chiếu mặc định trong hầu hết các ngôn ngữ lập trình, bao gồm C#. Khi một đối tượng được tham chiếu mạnh mẽ, người thu gom rác không thể thu thập nó cho đến khi tất cả các tài liệu tham khảo mạnh mẽ đến đối tượng được xóa. Điều này có nghĩa là miễn là có ít nhất một tham chiếu mạnh mẽ đến một đối tượng, nó sẽ vẫn còn trong bộ nhớ.

Trong MVVMcross, các tài liệu tham khảo mạnh có thể dẫn đến rò rỉ bộ nhớ nếu không được quản lý đúng. Ví dụ: nếu một ViewModel giữ một tham chiếu mạnh mẽ đến chế độ xem và chế độ xem cũng giữ một tham chiếu mạnh mẽ đến ViewModel, một chu kỳ giữ lại được tạo. Điều này ngăn cả hai đối tượng không được thu thập rác ngay cả khi chúng không còn cần thiết.

Tài liệu tham khảo yếu

** Mặt khác, các tài liệu tham khảo yếu cho phép người thu gom rác thu thập đối tượng được tham chiếu nếu không có tài liệu tham khảo mạnh nào tồn tại. Điều này đặc biệt hữu ích trong các kịch bản mà bạn muốn cho phép một đối tượng được thu thập rác nếu nó không còn cần thiết, nhưng vẫn muốn truy cập nó nếu nó có sẵn.

Trong MVVMcross, sử dụng các tài liệu tham khảo yếu được khuyến khích để tránh giữ chu kỳ giữa các chế độ xem và chế độ xem. Chẳng hạn, thay vì có chế độ xem tham chiếu mạnh mẽ một chế độ xem, bạn có thể sử dụng một tham chiếu yếu hoặc hệ thống nhắn tin để giao tiếp giữa chúng. Điều này đảm bảo rằng chế độ xem có thể được thu thập rác khi nó không còn cần thiết, ngay cả khi ViewModel vẫn tồn tại.

Ví dụ thực tế trong mvvmcross

Hãy xem xét một kịch bản trong đó ViewModel cần thông báo cho chế độ xem khi một số dữ liệu được tải. Một cách tiếp cận phổ biến là sử dụng một sự kiện trong ViewModel mà View đăng ký. Tuy nhiên, nếu chế độ xem đăng ký mạnh vào sự kiện này, nó sẽ tạo ra một tài liệu tham khảo mạnh mẽ từ ViewModel trở lại chế độ xem, điều này có thể ngăn khung nhìn không được thu thập rác.

Để tránh điều này, MVVMCROSS cung cấp các phương thức như `feaksubscribe`, cho phép chế độ xem đăng ký vào các sự kiện của ViewModel một cách yếu đuối. Bằng cách này, ViewModel không giữ một tham chiếu mạnh mẽ đến chế độ xem, ngăn chặn rò rỉ bộ nhớ.

Hướng dẫn sử dụng các tài liệu tham khảo yếu trong MVVMCROSS

- Sử dụng các tài liệu tham khảo yếu cho các chế độ xem: Khi ViewModel cần tương tác với chế độ xem, hãy sử dụng các tài liệu tham khảo yếu hoặc hệ thống nhắn tin để tránh giữ chu kỳ.
- Tránh các tài liệu tham khảo mạnh mẽ đến các quan điểm: Đảm bảo rằng các chế độ xem không giữ các tham chiếu mạnh mẽ đến các chế độ xem để cho phép các chế độ xem được thu thập rác khi chúng không còn cần thiết.
- Sử dụng các hệ thống nhắn tin: Cân nhắc sử dụng các hệ thống nhắn tin như `imvxmessenger` của MVVMCROSS để giao tiếp giữa các chế độ xem và chế độ xem mà không tạo ra các tài liệu tham khảo mạnh mẽ.

Bằng cách tuân theo các hướng dẫn này, bạn có thể quản lý bộ nhớ một cách hiệu quả trong các ứng dụng MVVMCROSS và ngăn chặn các vấn đề phổ biến như rò rỉ bộ nhớ.

Trích dẫn:
[1] https://stackoverflow.com/a/19379912
[2] https://forums.swift.org/t/unowned-references-have-more-overhead-than-strong-references/72765
[3] https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/weak-references
.
[5] https://stackoverflow.com/questions/40966271/weak-reference-and-strong-reference
[6] https://langdev.stackexchange.com/questions/1351/approaches-for-implementing-weak-references
.
[8] http://java-latte.blogspot.com/2013