TGViewer
Мобильная разработка #1 Мобильная разработка #1 @developer_mobila · 3.81K subscribers
Post #1726 825
🧟‍♂️ Зомби в вашем коде: Почему приложение «пухнет» со временем

Бывало такое? Вы открыли экран, закрыли его, а память не освободилась. Сделали так 10 раз и приложение упало.
Поздравляю, у вас Memory Leak (Утечка памяти).

Это происходит, когда объект (например, тяжелая Activity или ViewController) уже не нужен пользователю, но сборщик мусора (GC) не может его удалить, потому что кто-то другой всё еще держит на него ссылку.

Главные причины утечек (Checklist):

🛑 Android:

1. Static Context: Никогда не сохраняйте Context или View в статические переменные!
• Плохо: companion object { var myView: TextView? = null } - это удержит всю Activity в памяти навсегда.


2. Забытые слушатели: Если вы подписались на синглтон (LocationManager.addListener(this)), но забыли отписаться в onDestroy - Activity останется жить вечно.
3. Внутренние классы: Анонимные классы (например, Handler или AsyncTask) неявно хранят ссылку на внешний класс.

🛑 iOS:

1. Retain Cycles (Циклы сильных ссылок):
Объект А держит Б, а Б держит А. Они никогда не удалятся.
• Классика: Вы передали self внутрь замыкания (closure), которое сохранено в свойстве этого же класса.
• Лечение: Всегда используйте [weak self] внутри клоужеров, если есть риск цикла.



🛠 Инструменты для поиска (Без них вы слепы):

🐤 Android - LeakCanary:
Библиотека от Square. Must-have в любом debug-билде.
Она автоматически следит за Activity/Fragment. Если происходит утечка, она присылает уведомление (буквально кричит), дампит память и показывает красивое дерево ссылок: кто именно держит ваш объект.

📊 iOS - Memory Graph Debugger:
В Xcode есть встроенная кнопка (три шарика, соединенных линиями) в нижней панели дебага.
Нажимаете её во время работы приложения - и Xcode показывает граф всех объектов в памяти. Ищите фиолетовые восклицательные знаки (⚠️) - это утечки.

💡 Совет: Утечки памяти коварны тем, что на мощном телефоне разработчика они незаметны. А у пользователя на старом Android с 3 ГБ RAM приложение вылетит через 5 минут. Проверяйте память хотя бы раз в спринт.

А вы используете [weak self] везде «на всякий случай» или только там, где нужно? 👇

#memory #performance #leaks #leakcanary #ios #android #middle #optimization

👉 @developer_mobila
  • 👍 4
  • ❤ 1
More from @developer_mobila
  1. Sep 14, 2026Как разрабатывать приложения для iPhone на iPad Звучит как противоречие: iPad стал вполне…
  2. Aug 24, 2026🧪 Как заставить XCUITest работать с интерфейсом глубиной более 100 уровней Инженеры Циана…
  3. Jul 25, 2026🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.r…
  4. Jul 8, 2026🕵️‍♂️ «Я спрятал ключ в константу»: Как Джуны дарят доступы хакерам Вы интегрировали крут…
  5. Jun 25, 2026👾 Androguard: Швейцарский нож для реверс-инжиниринга Android Если вы занимаетесь пентесто…
  6. Jun 22, 2026Живой космос на Metal: как я переписывал фон мобильной игры и поднимал FPS с 20 до 120 В м…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →