Ответ
"Frozen" (замороженный) описывает состояние объекта, который становится неизменяемым (immutable). После заморозки любые попытки изменить объект (добавить, удалить или обновить элементы) приводят к ошибке времени выполнения.
Основные концепции и использование:
- Оптимизация производительности: Неизменяемые коллекции могут быть оптимизированы компилятором и безопасно использоваться в многопоточном коде без блокировок.
- Безопасность потоков: Замороженный объект можно безопасно передавать между потоками, так как его состояние гарантированно не изменится.
Пример с NSArray (Foundation):
import Foundation
var mutableArray: NSMutableArray = [1, 2, 3]
mutableArray.add(4) // Успешно, объект изменяемый
let frozenArray: NSArray = mutableArray // Приведение к NSArray "замораживает" его
// frozenArray.add(5) // КРАШ: "Attempt to mutate immutable object"
Где встречается:
- Combine / SwiftUI: Некоторые издатели (
Publisher) могут предоставлять "замороженные" неизменяемые снэпшоты данных. - Фреймворки Foundation: Классы вроде
NSUserDefaultsилиNSCacheмогут возвращать замороженные копии данных для безопасности. - Swift Evolution: Существует атрибут
@frozenдля перечислений, который гарантирует, что их набор кейсов не изменится в будущем, позволяя компилятору проводить дополнительные оптимизации.
Важно: "Frozen" не создает глубокую копию объекта. Он делает неизменяемой ссылку на существующие данные.