Замешательства Swift ARC

Я пытался следить за официальными документами Swift и пробовал пройти через примеры автоматического подсчета ссылок, которые они предоставили. В своем примере они пытаются показать, как избежать цикла сильных ссылок с помощью слабых ссылок.

import UIKit

class Person {
    let name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
    deinit { print("\(name) is being deinitialized") }
}

class Apartment {
    let unit: String
    init(unit: String) { self.unit = unit }
    weak var tenant: Person?
    deinit { print("Apartment \(unit) is being deinitialized") }
}

var john: Person?
var unit4A: Apartment?

john = Person(name: "John Appleseed")
unit4A = Apartment(unit: "4A")

john!.apartment = unit4A
unit4A!.tenant = john

john = nil

print("Strong ref cycle")

Как описано в документе, когда мы назначаем nil ссылке на john, она должна вызывать деиницирование, так как ей больше не назначены сильные ссылки. Но когда я запускаю приведенный выше пример, он не выводит этот оператор. Не уверен, в чем проблема. Есть ли какая-то путаница в моем понимании или происходит что-то еще?

Скопируйте и вставьте свой код в online.swiftplayground.run без небезопасного uikit импорта, и я вижу печать, что john деинициализирован.

J. Doe 18.12.2018 14:12

Вы запускаете этот код на игровой площадке? - Сравните stackoverflow.com/q/24363384.

Martin R 18.12.2018 14:14

Да, я запускаю это на игровой площадке

aaa111 18.12.2018 14:20

Ого, он действительно печатает. Что не так с Xcode? это ошибка?

aaa111 18.12.2018 14:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
38
0

Другие вопросы по теме