Можно ли создать слабую ссылку на словарь в Swift?

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

Ответ

Да, но с важными ограничениями, зависящими от типа словаря.

Ключевое правило: Слабые ссылки (weak) применимы только к reference-типам (классам).

  • Swift Dictionary — это структура (value type), поэтому к нему нельзя применить weak.
  • NSDictionary — это класс (reference type), поэтому к нему можно создать слабую ссылку.

Пример с NSDictionary:

// 1. Создаем сильную ссылку на объект-класс NSDictionary
var strongDict: NSDictionary? = NSDictionary(dictionary: ["key": "value"])

// 2. Создаем слабую ссылку на тот же объект
weak var weakDict: NSDictionary? = strongDict
print(weakDict) // Optional({ key = value; })

// 3. Уничтожаем сильную ссылку
strongDict = nil

// 4. Слабая ссылка автоматически обнуляется, так как на объект больше нет сильных ссылок
print(weakDict) // nil

Практический вывод: Для использования слабых ссылок в контексте словарей необходимо работать с классами Objective-C (NSDictionary, NSMutableDictionary), а не со Swift-структурами Dictionary.