Атака зомби длиной менее 15 строк кода:
class Parent { }
class Child {
unowned var parent: Parent // every child needs a parent
init(parent: Parent) {
self.parent = parent
}
}
var parent: Parent? = Parent()
let child = Child(parent: parent!) // let's pretend the forced unwrap didn't happen
parent = nil // let's deallocate this bad parent
print(child.parent) // BOOM!!!, crash
Что происходит в этом коде, так это то, что Child
содержит неизвестную ссылку на Parent
, которая становится недействительной после освобождения Parent
. Ссылка содержит указатель на более не живущего родителя (RIP) и доступ, который вызывает сбой с сообщением, похожим на это:
Неустранимая ошибка: Попытка прочитать неизвестную ссылку, но объект 0x1018362d0 уже был освобожден2018-10-29 20: 18: 39.423114 + 0200 MyApp [35825: 611433] Неустранимая ошибка: Попытка прочитать неизвестную ссылку, но объект 0x1018362d0 уже был освобожден
Примечание Код не будет работать на игровой площадке, для этого вам нужно обычное приложение.