Junior — Middle
Jakie zachowanie jest oczekiwane podczas deklarowania zmiennej user z użyciem słabej referencji za pomocą weak var user = User()?
sobes.tech AI
Odpowiedź od AI
W Swift, deklaracja zmiennej za pomocą weak var user = User() tworzy słabe odniesienie do obiektu User. Oznacza to, że odniesienie nie zwiększa licznika odniesień obiektu, a jeśli nie ma już silnych odniesień do tego obiektu, zostanie on zdezynicjalizowany (usunięty z pamięci).
W tym przypadku, jeśli user jest jedynym odniesieniem do obiektu User, to zaraz po utworzeniu obiektu, zostanie on zwolniony, a user stanie się nil.
Przykład:
class User {}
weak var user = User() // user od razu stanie się nil, ponieważ nie ma silnych odniesień
print(user) // nil
Dlatego słabe odniesienia zwykle deklaruje się jako opcjonalne (weak var user: User?) i używa się ich do zapobiegania cyklom zatrzymania, na przykład w delegatach.