Використання налагоджувача графіка пам'яті в Xcode - це ефективний спосіб ідентифікації циклів утримання в програмах MVVMCross. Ось покроковий посібник з того, як це зробити:
Вступ до налагоджувача графіка пам'яті
Налагоджувач графіку пам'яті - це потужний інструмент у XCode, який допомагає розробникам визначити витоки пам'яті та зберегти цикли, візуалізуючи об'єктні взаємозв'язки в пам'яті. Він забезпечує знімок поточного стану пам'яті, показуючи, які об'єкти зберігаються та як вони посилаються.
кроки для ідентифікації циклів утримання
1. Запустіть додаток: Почніть з запуску програми MVVMCross у Xcode. Переконайтесь, що ви тестуєте конкретну частину програми, де ви підозрюєте, що може виникнути цикл утримання.
2. Відкрийте налагоджувач графіку пам'яті: Після запуску вашої програми відкрийте налагоджувач графіку пам'яті, натиснувши кнопку три вузла, розташовану між візуальним налагодженням та кнопками симулятора місця розташування на панелі інструментів Xcode. Це зафіксує знімок пам'яті поточного стану вашого додатка.
3. Проаналізуйте знімок пам'яті: На лівій панелі налагоджувача графіка пам'яті ви побачите список об'єктів, які зараз є в пам'яті, а також кількість екземплярів кожного класу. Шукайте об'єкти, які не повинні бути там або які мають несподівано велику кількість випадків.
4. Визначте цикли збереження: виберіть на лівій панелі об'єкт, щоб переглянути його довідковий графік. Графік покаже сильні посилання як жирні лінії та невідомі посилання (які можуть бути слабкими або сильними) як світло -сірі лінії. Цикл утримання позначається петлею на графіку, де об'єкти посилаються один на одного таким чином, що заважає їм розмежовуватися.
5. Навігація об'єктних графіків: Щоб відстежувати джерело циклу утримання, можливо, вам доведеться переходити через кілька графіків об'єктів. Почніть з просоченого об'єкта і дотримуйтесь посилань назад, щоб знайти батьківський об'єкт, який його зберігає.
6. Перевірте деталі об'єкта: Коли ви натискаєте на вузол на графіку, панель перевірки надасть детальну інформацію про об'єкт, включаючи його властивості та відносини. Це може допомогти вам зрозуміти, чому об'єкт зберігається.
7. Повторні потоки ядра: Щоб підтвердити цикл утримання, повторіть потік або функцію в додатку кілька разів, роблячи знімки пам'яті після кожної ітерації. Якщо кількість випадків певного об'єкта з часом збільшується, це може вказувати на цикл утримання.
8. Зафіксуйте цикл утримання: Після того, як ви визначили джерело циклу утримання, ви можете виправити його, змінивши сильні посилання на слабкі або невідповідні посилання, де це доречно. Наприклад, у закритті використовуйте `[слабке себе]`, щоб уникнути захоплення `самостійно.
Загальні сценарії циклу утримання в mvvmcross
У програмах mvvmcross цикли зберігають цикли часто виникають через сильні посилання між моделями та переглядами перегляду або через закриття, що фіксують моделі перегляду або перегляди. Наприклад, якщо модель перегляду має сильне посилання на перегляд, а подання також має сильну орієнтир на модель перегляду, а також не можна розглянути.
Щоб запобігти таким циклам, переконайтеся, що ваші моделі перегляду були належним чином очищені при відхиленні поглядів. Використовуйте методи життєвого циклу, надані MVVMcross, такі як `зниклі ()`, щоб звільнити ресурси та порушити будь -які непотрібні посилання.
Дотримуючись цих кроків та розуміючи, як візуалізуються взаємозв'язки в налагоджувачі графіку пам'яті, ви можете ефективно визначити та виправити цикли зберігання у своїх програмах mvvmcross.
Цитати:[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-retain-cycle-detection-using-xcods-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-leaks-and-retain-cycle-detection-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-leak-with-memory-graph-debugger/
[4] https://forums.developer.apple.com/forums/thread/112268
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://www.donnywals.com/using-xcodes-memory-graph-to-find-memory-leaks/
[7] https://moldstud.com/articles/p-swift-memory-management-tips-for-retain-cycle-issues
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/