Когда система iOS очищает память?

«Когда система iOS очищает память?» — вопрос из категории Управление памятью, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Память в iOS очищается автоматически в двух основных сценариях:

  1. При нехватке памяти (Low Memory)
  2. Когда приложение переходит в фоновый режим

Механизм очистки:

  • ARC (Automatic Reference Counting) автоматически освобождает память объекта, когда его счётчик сильных ссылок достигает нуля.
  • Система отправляет уведомление UIApplication.didReceiveMemoryWarningNotification, на которое приложение должно реагировать, освобождая кэши и пересоздаваемые ресурсы.
  • UIKit автоматически очищает некоторые системные кэши (например, изображений) при получении memory warning.

Пример с weak reference:

class ExampleClass {
    let id: String
    init(id: String) { self.id = id; print("(id) создан") }
    deinit { print("(id) уничтожен") }
}

var strongReference: ExampleClass? = ExampleClass(id: "Объект А")
weak var weakReference = strongReference // Создана слабая ссылка

strongReference = nil // Сильная ссылка обнулена
// Консоль: "Объект А создан"
// Консоль: "Объект А уничтожен" (ARC освобождает память)
// weakReference теперь автоматически становится nil

Важно: Если приложение в фоне потребляет слишком много памяти, система может завершить его процесс.