Có, công cụ đồ thị bộ nhớ trong XCODE có thể giúp xác định các chu kỳ giữ lại trong các ứng dụng MVVMCROSS. Đây là cách nó hoạt động và cách nó có thể được áp dụng cho MVVMCROSS:
Hiểu chu kỳ giữ lại
Giữ lại các chu kỳ xảy ra khi hai hoặc nhiều đối tượng giữ các tài liệu tham khảo mạnh mẽ với nhau, ngăn chặn chúng bị phân loại khỏi bộ nhớ. Đây là một vấn đề phổ biến trong phát triển iOS, đặc biệt là khi sử dụng các đại biểu hoặc đóng cửa nắm bắt các đối tượng mạnh mẽ.
Sử dụng công cụ biểu đồ bộ nhớ
1. Chạy ứng dụng và chụp ảnh chụp nhanh: Để sử dụng công cụ biểu đồ bộ nhớ, hãy chạy ứng dụng MVVMcross của bạn trong Xcode và điều hướng qua các luồng lõi của nó. Chụp ảnh chụp nhớ tại các điểm khác nhau, đặc biệt là sau khi điều hướng ra khỏi chế độ xem hoặc xem các mô hình cần được giải quyết.
2. Phân tích ảnh chụp nhanh: Trong trình gỡ lỗi biểu đồ bộ nhớ, bảng điều khiển bên trái hiển thị tất cả các đối tượng hiện có trong bộ nhớ, cùng với số lượng thể hiện của chúng. Tìm kiếm các đối tượng đáng lẽ phải được giải quyết nhưng vẫn có mặt. Sự gia tăng số lượng các trường hợp của một lớp theo thời gian có thể chỉ ra một chu kỳ giữ lại.
3. Xác định các chu kỳ giữ lại: Chọn một đối tượng trong bảng điều khiển bên trái để xem biểu đồ đối tượng của nó. Biểu đồ hiển thị các tham chiếu giữ đối tượng trong bộ nhớ. Các dòng in đậm chỉ ra các tài liệu tham khảo mạnh mẽ, trong khi các đường màu xám nhạt biểu thị các tài liệu tham khảo chưa biết (có thể yếu hoặc mạnh). Nếu bạn thấy một vòng lặp trong đó các đối tượng tham chiếu lẫn nhau mạnh mẽ, thì đó có thể là một chu kỳ giữ lại.
4. Khắc phục các chu kỳ giữ lại: Khi bạn đã xác định được một chu kỳ lưu giữ, hãy xem lại mã của bạn để tìm nơi các tài liệu tham khảo mạnh đang được tạo. Thông thường, điều này liên quan đến việc thay đổi các tài liệu tham khảo mạnh mẽ đối với các tài liệu tham khảo yếu, đặc biệt là trong các đại biểu hoặc đóng cửa.
Áp dụng cho MVVMCROSS
Trong các ứng dụng MVVMcross, các mô hình xem được ghép nối chặt chẽ với vòng đời của các chế độ xem. Điều này đôi khi có thể dẫn đến giữ lại chu kỳ nếu không được quản lý đúng. Ví dụ: nếu mô hình chế độ xem 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 mô hình chế độ xem (có lẽ thông qua một ràng buộc), một chu kỳ giữ lại có thể xảy ra.
Để tránh điều này trong MVVMcross, hãy đảm bảo rằng mọi tài liệu tham khảo từ chế độ xem để xem các mô hình đều yếu. Sử dụng các phương pháp vòng đời được cung cấp bởi mvvmcross (như `biến mất`) để làm sạch bất kỳ tài liệu tham khảo mạnh mẽ nào khi các chế độ xem bị loại bỏ. Ngoài ra, sử dụng công cụ đồ thị bộ nhớ để xác minh rằng các mô hình xem đang được giải quyết chính xác khi các chế độ xem liên quan của chúng được xóa khỏi ngăn xếp điều hướng.
Ví dụ về việc xác định các chu kỳ giữ lại trong MVVMCROSS
Giả sử bạn có một `myViewModel` được ràng buộc với một` myview`. Nếu `myview` giữ một tài liệu tham khảo mạnh mẽ về` myviewModel` và `myViewModel` cũng có một tham chiếu mạnh mẽ đến` myview` (có thể thông qua một đại biểu hoặc đóng cửa), bạn sẽ thấy cả hai đối tượng còn lại trong bộ nhớ ngay cả sau khi điều hướng tránh xa `myview`. Sử dụng công cụ đồ thị bộ nhớ, bạn sẽ xác định chu kỳ này và sau đó sửa đổi mã của bạn để sử dụng các tham chiếu yếu khi cần thiết.
Bằng cách làm theo các bước này và sử dụng công cụ đồ thị bộ nhớ, bạn có thể xác định và giải quyết hiệu quả các chu kỳ giữ lại trong các ứng dụng MVVMcross, đảm bảo rằng việc sử dụng bộ nhớ của ứng dụng của bạn vẫn hiệu quả và ổn định.
Trích dẫn:.
.
.
[4] https://paul-samuels.com/blog/2018/11/20/unit-testing-retain-cycles/
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://stackoverflow.com/questions/54040726/mvvmcross-android-appears-to-be-keep-hold-of-viewmodels-and-never-disposing-w
.
.
[9] https://stackoverflow.com/questions/41660486/knowing-where-retain-cycles-are-and-removing-them