iOS разработчик, который делится фишками, своим опытом и опытом других.
В этом канале вы сможете найти истории из жизни, подходы к реализации а также новости и тренды из мира iOS-разработки
Авторский канал, iOS разработка
Memory Warnings при разработке: определение и способы воспроизведения
⚠️ Если системе не хватает свободной памяти и она не может восстановить её, завершив приостановленные приложения, UIKit отправляет предупреждение о нехватке памяти работающим приложениям.
UIKitвыдает предупреждения о нехватке памяти следующими способами:
🔘 Вызывая applicationDidReceiveMemoryWarning(_:) в app delegate.
🔘 Вызывая didReceiveMemoryWarning() в каждом из активных UIViewController.
🔘 C помощью didReceiveMemoryWarningNotification во все зарегистрированные observers.
🔘 Каждая из dispatch queues получает warning типа DISPATCH_SOURCE_TYPE_MEMORYPRESSURE.
Когда ваше приложение получает предупреждение о нехватке памяти, освободите как можно больше памяти так быстро, насколько это вообще возможно, с помощью следующих рекомендаций Apple:
1️⃣ Удалите ссылки на изображения, мультимедийные файлы или любые большие файлы данных, которые уже представлены на диске и могут быть повторно загружены позже.
2️⃣ Удалите ссылки на любые временные объекты, которые вам больше не нужны.
3️⃣ Если активные задачи могут потреблять значительный объем памяти, приостановите dispatch queues или ограничьте количество одновременных операций, выполняемых вашим приложением.
Если приложение не отдает достаточно памяти или же приложение использует слишком много памяти слишком быстро, iOS удалит приложение без предупреждения.
Иногда во время тестирования из-за этого приложение закрывается, но в отладчике ничего не появляется.
Что делать в таком случае?
🟢 На симуляторе: откройте Debug -> Simulate Memory Warning (или воспользуйтесь шорткатом CMD+SHIFT+M).
🟢 Приватное API — не используйте его в проде: UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)
ℹ️ А чтобы зафорсить out of memory, есть ещё и такой способ.
@iOS Dev