Что происходит, когда объект пытается получить доступ к освобожденному бесхозному объекту? - PullRequest
0 голосов
/ 05 мая 2020

, если A объявлен как unowned var и затем освобожден, что происходит, когда другой объект пытается получить доступ к A ?

1 Ответ

1 голос
/ 05 мая 2020

Ссылки без владельца, как и слабые ссылки, не увеличивают счетчик сохранения объекта, на который делается ссылка. Однако в Swift у незарегистрированной ссылки есть дополнительное преимущество - она ​​не является необязательной. Это упрощает управление ими, вместо того, чтобы прибегать к использованию дополнительной привязки. Это мало чем отличается от неявно развернутых опций. Кроме того, бесхозные ссылки не обнуляются. Это означает, что когда объект освобождается, он не обнуляет указатель. Это означает, что использование ссылок без владельца может в некоторых случаях привести к появлению висячих указателей. В мире Objective- C бесхозные ссылки сопоставляются с unsafe_unretained ссылками.

Таким образом, это вызовет Fatal Error, например:

Неустранимая ошибка: Попытка прочитать незарегистрированная ссылка, но объект X уже освобожден

Как signal SIGABRT

...