SW Swift  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

ARC и управление памятью

Разбирает тему «ARC и управление памятью» на практических сценариях: поиск дефектов, сравнение решений и оценка последствий. Вопросы требуют не только узнать конструкцию, но и проследить выполнение, найти причину дефекта, выбрать исправление и оценить пограничный сценарий. Языковые примеры рассчитаны на Swift 6; задания с Apple SDK рассматриваются в контексте современных платформенных контрактов.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 25 вопросов, на работу отведено 70 минут. В каждом задании верен только один вариант. Часть фрагментов намеренно содержит ошибку: определяйте её по коду, а не по внешнему виду ответа. После завершения откроются общий результат, 5 тематических шкал и подробные объяснения.
Вопрос 1 из 25
Какой из пяти выводов подтверждается построчной трассировкой? Важно учесть: время жизни объекта и циклы сильного владения.
SwiftСильные ссылки · фрагмент для разбора
final class Node { let name: String; init(_ n: String) { name = n }; deinit { print(name) } }
var node: Node? = Node("A")
var alias = node
node = nil
print(alias?.name as Any)
Вопрос 2 из 25
Что увидит разработчик после выполнения этого примера по теме «Слабые ссылки weak»? Важно учесть: автоматическое обнуление и осмысленное невладение.
SwiftСлабые ссылки weak · фрагмент для разбора
final class Target {}
weak var weakRef: Target?
var strong: Target? = Target()
weakRef = strong
strong = nil
print(weakRef as Any)
Вопрос 3 из 25
В этом примере важна одна точная деталь механизма «Невладеющие ссылки unowned». Что действительно произойдёт? Важно учесть: риск висячей невладеющей ссылки.
SwiftНевладеющие ссылки unowned · фрагмент для разбора
final class Customer {}
final class Card { unowned let owner: Customer; init(owner: Customer) { self.owner = owner } }
let customer = Customer()
let card = Card(owner: customer)
print(card.owner)
Вопрос 4 из 25
Проследите типы, изменения состояния и порядок вызовов. Какое описание результата совпадает с кодом? Важно учесть: цикл через замыкание и его корректное размыкание.
SwiftЦиклы удержания · фрагмент для разбора
final class Controller {
    lazy var action: () -> Void = { [weak self] in self?.run() }
    func run() {}
}
Вопрос 5 из 25
Не запуская код, восстановите состояние значений после последней строки. Какой вывод верен для «Проверка освобождения объектов»? Не упускайте из виду следующее: корректная постановка теста на освобождение объекта.
SwiftТестирование и диагностика · фрагмент для разбора
weak var probe: AnyObject?
do {
    final class Token {}
    let token = Token()
    probe = token
}
print(probe as Any)
Вопрос 6 из 25
Какой диагноз согласуется и с исходным кодом, и с правилами Swift? Не упускайте из виду следующее: время жизни объекта и циклы сильного владения.
SwiftСильные ссылки · фрагмент для разбора
final class Owner { var child: Child? }
final class Child { var owner: Owner? }
var owner: Owner? = Owner()
var child: Child? = Child()
owner!.child = child
child!.owner = owner
owner = nil; child = nil
Вопрос 7 из 25
Разработчик видит симптом, но ищет первопричину. Какое объяснение выдерживает проверку кодом? Здесь оценивается автоматическое обнуление и осмысленное невладение.
SwiftСлабые ссылки weak · фрагмент для разбора
struct Holder { weak var value: AnyObject? }
Вопрос 8 из 25
Почему этот код не выполняет заявленный контракт? Сосредоточьтесь на следующем: риск висячей невладеющей ссылки.
SwiftНевладеющие ссылки unowned · фрагмент для разбора
final class Person {}
final class Ticket { unowned let person: Person; init(_ p: Person) { person = p } }
var ticket: Ticket?
do { let p = Person(); ticket = Ticket(p) }
print(ticket!.person)
Вопрос 9 из 25
Разработчик видит симптом, но ищет первопричину. Какое объяснение выдерживает проверку кодом? Здесь оценивается цикл через замыкание и его корректное размыкание.
SwiftЦиклы удержания · фрагмент для разбора
final class Loader {
    var completion: (() -> Void)?
    func start() {
        completion = { self.finish() }
    }
    func finish() {}
}
Вопрос 10 из 25
Что в этом фрагменте нужно объяснить первым, чтобы дальнейшая правка не оказалась случайной? Не упускайте из виду следующее: корректная постановка теста на освобождение объекта.
SwiftТестирование и диагностика · фрагмент для разбора
func verifyRelease(make: () -> AnyObject) -> Bool {
    weak var probe: AnyObject?
    let object = make()
    probe = object
    return probe == nil
}
Вопрос 11 из 25
Какое исправление соответствует правилам Swift и не прячет сбой за обходным значением? Важно учесть: время жизни объекта и циклы сильного владения.
SwiftСильные ссылки · фрагмент для разбора
final class Owner { var child: Child? }
final class Child { var owner: Owner? }
var owner: Owner? = Owner()
var child: Child? = Child()
owner!.child = child
child!.owner = owner
owner = nil; child = nil
Вопрос 12 из 25
Что следует изменить, чтобы исправить первопричину, а не подогнать ожидаемый результат? Проверяется автоматическое обнуление и осмысленное невладение.
SwiftСлабые ссылки weak · фрагмент для разбора
struct Holder { weak var value: AnyObject? }
Вопрос 13 из 25
Какое исправление соответствует правилам Swift и не прячет сбой за обходным значением? Не упускайте из виду следующее: риск висячей невладеющей ссылки.
SwiftНевладеющие ссылки unowned · фрагмент для разбора
final class Person {}
final class Ticket { unowned let person: Person; init(_ p: Person) { person = p } }
var ticket: Ticket?
do { let p = Person(); ticket = Ticket(p) }
print(ticket!.person)
Вопрос 14 из 25
Какое изменение устраняет именно показанную причину и сохраняет ясный контракт «Циклы удержания»? Проверяется цикл через замыкание и его корректное размыкание.
SwiftЦиклы удержания · фрагмент для разбора
final class Loader {
    var completion: (() -> Void)?
    func start() {
        completion = { self.finish() }
    }
    func finish() {}
}
Вопрос 15 из 25
Какой вариант ремонта вы бы приняли после содержательной проверки кода? Важно учесть: корректная постановка теста на освобождение объекта.
SwiftТестирование и диагностика · фрагмент для разбора
func verifyRelease(make: () -> AnyObject) -> Bool {
    weak var probe: AnyObject?
    let object = make()
    probe = object
    return probe == nil
}
Вопрос 16 из 25
Какое ограничение темы «Сильные ссылки» обязательно проверить отдельным граничным тестом? Не упускайте из виду следующее: время жизни объекта и циклы сильного владения.
Вопрос 17 из 25
Какой пограничный случай способен изменить вывод, хотя синтаксис останется почти тем же? Проверяется автоматическое обнуление и осмысленное невладение.
Вопрос 18 из 25
На какой границе входов, владения или времени жизни результат может стать другим? Здесь оценивается риск висячей невладеющей ссылки.
Вопрос 19 из 25
Где заканчивается гарантия, продемонстрированная в обычном примере «Циклы удержания»? Важно учесть: цикл через замыкание и его корректное размыкание.
Вопрос 20 из 25
Что нужно учесть, прежде чем объявлять найденное правило универсальным? Проверяется корректная постановка теста на освобождение объекта.
Вопрос 21 из 25
Команда выбирает не просто рабочую строку, а устойчивое устройство решения. Какой подход сильнее? Здесь оценивается время жизни объекта и циклы сильного владения.
Вопрос 22 из 25
Какое решение уменьшит число скрытых состояний и упростит расследование следующего сбоя? Сосредоточьтесь на следующем: автоматическое обнуление и осмысленное невладение.
Вопрос 23 из 25
Какой подход делает неправильное использование заметным раньше? Не упускайте из виду следующее: риск висячей невладеющей ссылки.
Вопрос 24 из 25
Какой подход делает неправильное использование заметным раньше? Не упускайте из виду следующее: цикл через замыкание и его корректное размыкание.
Вопрос 25 из 25
Какое решение уменьшит число скрытых состояний и упростит расследование следующего сбоя? Здесь оценивается корректная постановка теста на освобождение объекта.

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу