и посмотреть медиа
Swift | Вопросы собесов
и посмотреть медиа
Вопросы для собеседований по Swift, тесты и задачи для iOS-разработчиков в Telegram.
Вопросы для собеседований по Swift, тесты и задачи для iOS-разработчиков в Telegram.
AI бот для озвучки текста и клонирования голоса в Telegram. Создавай аудио с помощью нейросети быстро и просто.
Канал посвящен подготовке к собеседованиям по языку Swift. Здесь собраны актуальные вопросы, тесты, практические задачи и информация о вакансиях. Идеально для начинающих и опытных iOS-разработчиков, желающих освежить знания и успешно пройти интервью.
🤔 Какие объекты могут храниться на куче? В Swift — все классы, так как они являются ссылочными типами. Также структуры и enum могут попасть в кучу, если они находятся внутри классов или захватываются замыканиями. Когда могут структуры хранится в куче, а value типы в стеке? Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 В чем проблема, если все переменные будут делаться в вик? Если все переменные в коде сделать weak, объекты могут мгновенно удаляться из памяти, потому что никто не будет владеть ими (strong reference). 🚩Как работает `weak`? - weak создает слабую ссылку – объект не увеличивает счетчик ссылок (retain count). - Если нет других (strong) ссылок на объект, он удаляется (ARC освобождает память). - weak переменные всегда являются Optional, потому что объект может стать nil в любой момент. class Person { weak var name: String? // ❌ Ошибка! Строки – это value type, weak нельзя } Проблема, если weak используется везде class Car { weak var model: String? // ❌ Ошибка (value type) weak var owner: Person? // ⚠️ Будет nil, если нет других strong ссылок } class Person { var car: Car? } var person: Person? = Person() person?.car = Car() person?.car?.owner = person // ❌ `owner` - weak, объект сразу удалится print(person?.car?.owner) // nil, объект Person уничтожен 🚩Когда `weak` полезен? 🟠Избегание циклов ссылок (retain cycle) Например, между delegate и ViewController protocol SomeDelegate: AnyObject { func doSomething() } class ViewController { weak var delegate: SomeDelegate? // ✅ Prevent retain cycle } 🟠Когда объект не должен владеть другим объектом Например, ячейки в UITableView не должны владеть ViewController. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Каким методом можно запустить анимацию? Обычно используется UIView.animate(withDuration:). Для более тонкой настройки применяются UIViewPropertyAnimator или CoreAnimation (CABasicAnimation, CAKeyframeAnimation). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Назовите property wrapper, которые объявляют reference семантику? Reference (объектное поведение, ссылочный тип): - @ObservedObject - @StateObject - @EnvironmentObject - @Published - @Model (внутри SwiftData — работает с объектами) Они наблюдают за изменениями в объектных классах и позволяют отслеживать состояние. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Зачем нужны слабые ссылки? Слабые ссылки (weak references) играют важную роль в управлении памятью, особенно когда нужно предотвратить циклы сильных ссылок (retain cycles) и утечки памяти. 🚩Основные причины использования 🟠Предотвращение циклов сильных ссылок Циклы сильных ссылок возникают, когда два объекта держат сильные ссылки друг на друга, что препятствует их освобождению из памяти. Слабые ссылки разрывают этот цикл, позволяя одному из объектов освобождаться. class Person { var name: String weak var friend: Person? init(name: String) { self.name = name } } var alice: Person? = Person(name: "Alice") var bob: Person? = Person(name: "Bob") alice?.friend = bob bob?.friend = alice alice = nil // Теперь объекты могут быть освобождены bob = nil 🟠Избежание утечек памяти Утечки памяти происходят, когда объекты, которые больше не нужны, не освобождаются из памяти. Слабые ссылки помогают избежать этих утечек, обеспечивая правильное освобождение памяти. Делегаты часто объявляются как слабые ссылки, чтобы избежать утечек памяти. protocol TaskDelegate: AnyObject { func taskDidFinish() } class Task { weak var delegate: TaskDelegate? func complete() { delegate?.taskDidFinish() } } class ViewController: TaskDelegate { var task = Task() init() { task.delegate = self } func taskDidFinish() { print("Task finished") } } 🟠Управление временными зависимостями Слабые ссылки удобны для временных зависимостей, когда объект не должен удерживаться в памяти, если нет других сильных ссылок. Использование слабых ссылок для временных объектов. class Cache { weak var temporaryObject: SomeClass? } class SomeClass { // Код класса } var cache = Cache() var object = SomeClass() cache.temporaryObject = object object = SomeClass() // Старый объект удаляется, так как на него нет сильных ссылок 🚩Плюсы и минусы ➕Предотвращение циклов ссылок Основное преимущество слабых ссылок заключается в их способности разрывать циклы ссылок, предотвращая утечки памяти. ➕Обеспечение корректного управления памятью Слабые ссылки позволяют объектам освобождаться из памяти, когда на них больше нет сильных ссылок, что улучшает управление ресурсами. ➕Гибкость и безопасность Использование слабых ссылок обеспечивает более гибкое и безопасное управление зависимостями между объектами. ➖Сложности управления Необходимо учитывать, что слабые ссылки могут стать nil в любой момент, поэтому требуется дополнительная проверка. ➖Понимание жизненного цикла объектов Требуется хорошее понимание жизненного цикла объектов и управления памятью, чтобы правильно использовать слабые ссылки. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как заставить оператор поддерживать функцию типа t? В Swift можно заставить оператор поддерживать функцию типа T с помощью перегрузки операторов. Это особенно полезно, когда мы хотим, чтобы оператор мог работать с пользовательскими типами или функциями. 🟠Что значит "функция типа T"? Функция в Swift — это тоже тип данных. func add(_ a: Int, _ b: Int) -> Int { return a + b } Тип этой функции (Int, Int) -> Int 🟠Пример: оператор `+` для функций Допустим, у нас есть две функции, и мы хотим, чтобы оператор + создавал новую функцию, объединяя их поведение. import Foundation // Функция типа (Int) -> Int func double(_ x: Int) -> Int { return x * 2 } func increment(_ x: Int) -> Int { return x + 1 } // Перегружаем оператор + для функций (Int) -> Int func + (lhs: @escaping (Int) -> Int, rhs: @escaping (Int) -> Int) -> (Int) -> Int { return { x in rhs(lhs(x)) } // Сначала вызываем первую, затем вторую } // Используем оператор let combinedFunction = double + increment print(combinedFunction(3)) // (3 * 2) + 1 = 7 🟠Пример: оператор `*` для функций Можно сделать оператор *, который применяет функцию несколько раз. // Перегружаем оператор * для дублирования применения функции func * (lhs: @escaping (Int) -> Int, rhs: Int) -> (Int) -> Int { return { x in var result = x for _ in 0..
Открыть канал и посмотреть медиа🤔 Как решить проблему race condition? Race condition — это ошибка, возникающая при одновременном доступе нескольких потоков к одним и тем же данным без должной синхронизации. Для решения проблемы race condition в Swift используются механизмы синхронизации, такие как блокировки (locks), семафоры или серийные очереди GCD. Эти инструменты позволяют ограничить доступ к общим ресурсам, чтобы только один поток мог их изменять в любой момент времени. Это предотвращает непредсказуемое поведение программы и ошибки при многопоточном доступе к данным. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какой путь проделывает ивент , когда пользователь нажимает на приложение? Когда пользователь нажимает на иконку приложения на домашнем экране, iOS проходит несколько этапов перед тем, как приложение становится активным. 🚩Разберём путь события подробнее 🟠Пользователь нажимает на иконку (SpringBoard) iOS-устройства управляются системой SpringBoard – это оболочка, отвечающая за домашний экран, иконки, фоновые процессы. Когда пользователь тапает на иконку приложения, SpringBoard отправляет событие UIApplicationLaunchOptionsKey в систему. 🟠iOS загружает процесс приложения Если приложение не запущено: - iOS создаёт новый процесс и выделяет память. - Загружаются зависимости (библиотеки, фреймворки). - Создаётся объект UIApplication. 🟠Вызывается `application(_:didFinishLaunchingWithOptions:)` Здесь приложение инициализируется и загружается основной UI. Метод в AppDelegate: func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { print("Приложение запущено") return true } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Счётчик ссылок дошёл до нуля — в какой момент удалим объект? Как только счётчик ссылок объекта становится равным нулю, ARC немедленно освобождает память. Удаление происходит автоматически в этот момент, и вызывается деинициализатор (deinit), если он реализован. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиаТолько зарегистрированные пользователи могут делиться своим мнением.
Станьте первым, кто поделится своим впечатлением об этом ресурсе!
Сеть зарядных станций для электромобилей с актуальной информацией и поддержкой.
Grow Together: комплекс ресурсов для cracking – софт, инструменты и гайды в одном месте для специалистов.
Garmin & Casio - официальный магазин с часами, смарт-устройствами по выгодным ценам. Широкий ассортимент для спорта и повседневности.