База Hintsage

Программирование Swift

Язык Swift и разработка приложений в экосистеме Apple.

Темы раздела

Выберите подраздел

Практика

Вопросы: Программирование Swift

При замене значения свойства определите, когда старый объект может быть уничтожен относительно didSet.

final class Token {
    let id: String
    init(_ id: String) { self.id = id }
    deinit { print("deinit", id) }
}

final class Box {
    var token: Token? {
        didSet { print("didSet", oldValue?.id ?? "nil") }
    }
}

let box = Box()
box.token = Token("A")
box.token = Token("B")

Разберите механизм временного преобразования non-escaping-замыкания в escaping: может ли такой вызов продлить жизнь захваченного объекта после завершения withoutActuallyEscaping?

func accept(_ action: @escaping () -> Void) {
    action()
}

func run(_ action: () -> Void) {
    withoutActuallyEscaping(action) { temporary in
        accept(temporary)
    }
}

final class Probe {
    func touch() { print("touch") }
    deinit { print("deinit") }
}

func test() {
    let probe = Probe()
    run { probe.touch() }
}

test()
Программирование SwiftARC и памятьРазработчик приложений на Swift

В коде сохраняют ObjectIdentifier экземпляра, чтобы использовать его позже как идентификатор. Оцените, может ли такая переменная удержать объект живым:

final class Session {
    deinit { print("deinit") }
}

var session: Session? = Session()
let identifier = ObjectIdentifier(session!)
session = nil
print(identifier)

Показано 521–540 из 651

Восстановление доступа