После подписки контроллера на уведомления его deinit не вызывается после закрытия экрана; контроллер хранит токен подписки. Какой граф владения нужно проверить первым?
База Hintsage
Программирование Swift
Язык Swift и разработка приложений в экосистеме Apple.
Темы раздела
Выберите подраздел
- 0 вопросов
Общие вопросы
Смешанные вопросы по Swift.
Открыть раздел - 50 вопросов
Swift Core
Типы, функции, структуры, классы и базовая семантика.
Открыть раздел - 49 вопросов
Optionals и система типов
Optionals, value/reference semantics, casting и pattern matching.
Открыть раздел - 50 вопросов
Протоколы и generics
Protocols, extensions, associated types и generic constraints.
Открыть раздел - 50 вопросов
Коллекции и функциональный стиль
Collections, closures, map/filter/reduce и sequences.
Открыть раздел - 50 вопросов
ARC и память
ARC, reference cycles, weak/unowned и время жизни объектов.
Открыть раздел - 50 вопросов
Конкурентность
async/await, actors, tasks и безопасность данных.
Открыть раздел - 2 вопроса
Обработка ошибок
throws, Result, defer и моделирование ошибок.
Открыть раздел
Практика
Вопросы: Программирование Swift
В приложении объект записан в статическое свойство, а все локальные ссылки на него обнулены. Когда ARC сможет уничтожить этот объект?
Служит ли weak-ссылка синхронизацией при одновременном уничтожении объекта в другом потоке?
Как по графу владения отличить retain cycle от объекта, который всё ещё удерживается ожидаемой сильной ссылкой?
Во время вызова метода объект захвачен сильным non-escaping-замыканием: до какого момента ARC обязан сохранять экземпляр?
При запуске долгоживущей Task, чьё замыкание захватывает self, когда ARC сможет уничтожить контроллер?
Сохраняет ли экземпляр класса время жизни после помещения в значение типа Any?
При копировании Array, содержащего экземпляры классов, что происходит с самими объектами до изменения одной из копий?
При присваивании экземпляра классового типа переменной any Protocol становится ли эта переменная его сильным владельцем?
В кэше объект хранится только через weak-ссылку. Почему он может исчезнуть сразу после добавления в кэш?
Кто запускает deinit экземпляра класса в Swift и почему его нельзя вызвать вручную?
Какой runtime-компромисс появляется при использовании weak-ссылки вместо strong?
Какие stored-свойства экземпляра ещё доступны внутри его deinit?
От чего зависит поток выполнения deinit, когда последняя сильная ссылка освобождается в фоне?
Каким образом ARC обнуляет weak-ссылки при уничтожении объекта?
При выполнении callback, захватившего self слабо, как guard let влияет на время жизни объекта?
final class Screen {
var onTap: (() -> Void)?
func bind() {
onTap = { [weak self] in
guard let self else { return }
self.render()
}
}
func render() { print("render") }
}
Объясните механизм: почему Swift не разрешает объявлять weak-ссылку на значение-тип?
После попытки сделать делегат слабой ссылкой компилятор отклоняет объявление. Какое ограничение типа отсутствует у EventHandler?
protocol EventHandler {
func handle()
}
final class Controller {
weak var handler: EventHandler?
func run() {
handler?.handle()
}
}
При уничтожении экземпляра класса-наследника в каком порядке выполняются его deinit и deinit суперкласса?
Можно ли считать weak-ссылку гарантированно ненулевой внутри deinit объекта?
Показано 61–80 из 301