Как устроен счетчик ссылок в Swift
В процессе выполнения приложения в памяти создается множество объектов. И если продолжать создавать объекты и не удалять лишние, тогда память закончится. Чтобы этого избежать, нужен алгоритм освобождения памяти. Главный его принцип – это отслеживание достижимости объекта. То есть, когда на объект есть ссылки, то он считается достижимым. А пока на объект хоть кто-то ссылается – значит его нельзя удалять из памяти. И как только пропадет последняя ссылка, то объект уничтожается и освобождается занятая им память.
Для отслеживания доступности объекта нужен алгоритм отслеживания активных ссылок. В Swift этот алгоритм реализован в виде механизма автоматического подсчета ссылок. Automatic Reference Counter, или сокращенно ARC – появился еще со времен Objective-C. В его основе счетчик ссылок, который есть у каждого объекта класса.
Более глубже и подробно про ARC, виды ссылок, side table, жизненный цикл объекта, битовое поле можно прочитать в данной статье
В процессе выполнения приложения в памяти создается множество объектов. И если продолжать создавать объекты и не удалять лишние, тогда память закончится. Чтобы этого избежать, нужен алгоритм освобождения памяти. Главный его принцип – это отслеживание достижимости объекта. То есть, когда на объект есть ссылки, то он считается достижимым. А пока на объект хоть кто-то ссылается – значит его нельзя удалять из памяти. И как только пропадет последняя ссылка, то объект уничтожается и освобождается занятая им память.
Для отслеживания доступности объекта нужен алгоритм отслеживания активных ссылок. В Swift этот алгоритм реализован в виде механизма автоматического подсчета ссылок. Automatic Reference Counter, или сокращенно ARC – появился еще со времен Objective-C. В его основе счетчик ссылок, который есть у каждого объекта класса.
Более глубже и подробно про ARC, виды ссылок, side table, жизненный цикл объекта, битовое поле можно прочитать в данной статье
👍12❤2🔥1
Пишем свой сетевой слой на Swift: протокол-ориентированный подход
Сейчас практически 100% приложений используют работу с сетью, поэтому вопрос организации и использования сетевого слоя встает перед каждым. Есть два основных подхода к решению этой проблемы, это либо использование сторонних библиотек, либо собственная реализация сетевого слоя. В данной статье расматривается именно второй вариант, реализуется сетевой слой с использованием всех последних возможностей языка, применяя протоколы и перечисления. Это избавляет проект от лишних зависимостей в виде дополнительных библиотек. Те, кто хоть раз видел Moya, сразу узнают множество схожих деталей в реализации и использовании, так оно и есть, не трогая Moya и Alamofire.
Статья для просмотра
Сейчас практически 100% приложений используют работу с сетью, поэтому вопрос организации и использования сетевого слоя встает перед каждым. Есть два основных подхода к решению этой проблемы, это либо использование сторонних библиотек, либо собственная реализация сетевого слоя. В данной статье расматривается именно второй вариант, реализуется сетевой слой с использованием всех последних возможностей языка, применяя протоколы и перечисления. Это избавляет проект от лишних зависимостей в виде дополнительных библиотек. Те, кто хоть раз видел Moya, сразу узнают множество схожих деталей в реализации и использовании, так оно и есть, не трогая Moya и Alamofire.
Статья для просмотра
🔥12👍5❤2
Создание Custom BottomSheet
В данной статье происходит реализация создания кастомного BottomSheet c реализацией распознования жестов, ограничения движения и добавление анимации при завершения касания.
В данной статье происходит реализация создания кастомного BottomSheet c реализацией распознования жестов, ограничения движения и добавление анимации при завершения касания.
👍5❤3🔥3
iOS Run Loop: Что? Когда? Зачем?
Run Loop (цикл исполнения) является механизмом, который позволяет потокам обрабатывать события (events) бесконечно в любое время.
После того, как поток выполнит эту функцию, он будет пребывать в цикле “прием сообщения -> ожидание -> обработка -> спячка до следующего сообщения -> прием сообщения” внутри функции до конца этого цикла (например, было передано сообщение завершения), после чего функция завершится возвратом.
Когда следует использовать цикл исполнения?
Cocoa предоставляет код для запуска основного цикла (main loop) программы и автоматического запуска цикла исполнения. Метод запуска UIApplication в программе IOS (или NSApplication в Mac OS X) используется как часть этапа запуска программы. Он запустит основной цикл программы, когда будет завершен ее запуск.
Для вспомогательных же потоков вам самим необходимо
определить, нужны ли им циклы исполнения. Если нужны, то вам придется настроить и запустить их самостоятельно. По умолчанию вам не рекомендуется запускать цикл исполнения для потока ни при каких обстоятельствах. Например, когда вы используете потоки для обработки заранее определенной длительной задачи, вам следует избегать запуска цикла исполнения. Запуск цикла исполнения оправдан только если вы хотите активно взаимодействовать с потоками.
Интересные статьи про Run Loop: статья, статья
Run Loop (цикл исполнения) является механизмом, который позволяет потокам обрабатывать события (events) бесконечно в любое время.
После того, как поток выполнит эту функцию, он будет пребывать в цикле “прием сообщения -> ожидание -> обработка -> спячка до следующего сообщения -> прием сообщения” внутри функции до конца этого цикла (например, было передано сообщение завершения), после чего функция завершится возвратом.
Когда следует использовать цикл исполнения?
Cocoa предоставляет код для запуска основного цикла (main loop) программы и автоматического запуска цикла исполнения. Метод запуска UIApplication в программе IOS (или NSApplication в Mac OS X) используется как часть этапа запуска программы. Он запустит основной цикл программы, когда будет завершен ее запуск.
Для вспомогательных же потоков вам самим необходимо
определить, нужны ли им циклы исполнения. Если нужны, то вам придется настроить и запустить их самостоятельно. По умолчанию вам не рекомендуется запускать цикл исполнения для потока ни при каких обстоятельствах. Например, когда вы используете потоки для обработки заранее определенной длительной задачи, вам следует избегать запуска цикла исполнения. Запуск цикла исполнения оправдан только если вы хотите активно взаимодействовать с потоками.
Интересные статьи про Run Loop: статья, статья
❤6🔥3👍2
Математические основы Auto Layout
Auto Layout — это система верстки. Прежде, чем углубиться в неё, поговорим о современной верстке вообще. Затем займемся Auto Layout — разберемся какую задачу он решает и как это делает. Рассмотрим особенности в имплементации Auto Layout в iOS, и попробуем выработать практические советы, которые могут помочь в работе с ним.
Auto Layout под капотом работают на уровне линейных уравнений. Системы линейных уравнений знакомы нам еще со школы — обозначаются фигурной скобкой, а их решение — уже без. Также у систем линейных уравнений есть сущности, которыми оперирует Auto Layout — ограничения. Обозначаются прямой линией.
Система линейных уравнений особенна тем, что над ней определена масса операций: складывание строк, умножение их на константы и т.д. Эти операции называются линейными преобразованиями, и с их помощью система приводится к произвольной форме.
Прелесть линейных преобразований в том, что они обратимы. Это подводит нас к интересной и довольно тонкой идее, с которой начинается вся современная верстка.
Более подробно читать тут
Auto Layout — это система верстки. Прежде, чем углубиться в неё, поговорим о современной верстке вообще. Затем займемся Auto Layout — разберемся какую задачу он решает и как это делает. Рассмотрим особенности в имплементации Auto Layout в iOS, и попробуем выработать практические советы, которые могут помочь в работе с ним.
Auto Layout под капотом работают на уровне линейных уравнений. Системы линейных уравнений знакомы нам еще со школы — обозначаются фигурной скобкой, а их решение — уже без. Также у систем линейных уравнений есть сущности, которыми оперирует Auto Layout — ограничения. Обозначаются прямой линией.
Система линейных уравнений особенна тем, что над ней определена масса операций: складывание строк, умножение их на константы и т.д. Эти операции называются линейными преобразованиями, и с их помощью система приводится к произвольной форме.
Прелесть линейных преобразований в том, что они обратимы. Это подводит нас к интересной и довольно тонкой идее, с которой начинается вся современная верстка.
Более подробно читать тут
👍13🔥5❤3
Программирование iOS 14
Описание книги
Если вы знакомы с основами Swift, Xcode и фреймворка Cocoa, эта книга предоставляет структурированное объяснение всех основных компонентов реального мира iOS-приложений. Благодаря глубокому изучению и большому количеству примеров кода вы узнаете, как создавать представления, управлять контроллерами представлений и добавлять функции из платформ iOS.
1. Создавайте, упорядочивайте, рисуйте, накладывайте и анимируйте виды, которые реагируют на прикосновение
2. Используйте контроллеры представления для управления несколькими экранами интерфейса
3. Основные классы интерфейса для представлений прокрутки, представлений таблиц, представлений коллекций, текста, всплывающих окон, разделенных представлений, веб-представлений и элементов управления.
4. Погрузитесь в фреймворки для звука, видео, карт и датчиков
Доступ к пользовательским библиотекам: музыка, фотографии, контакты и календарь
5. Изучите дополнительные темы, включая файлы, сети и потоки.
Описание книги
Если вы знакомы с основами Swift, Xcode и фреймворка Cocoa, эта книга предоставляет структурированное объяснение всех основных компонентов реального мира iOS-приложений. Благодаря глубокому изучению и большому количеству примеров кода вы узнаете, как создавать представления, управлять контроллерами представлений и добавлять функции из платформ iOS.
1. Создавайте, упорядочивайте, рисуйте, накладывайте и анимируйте виды, которые реагируют на прикосновение
2. Используйте контроллеры представления для управления несколькими экранами интерфейса
3. Основные классы интерфейса для представлений прокрутки, представлений таблиц, представлений коллекций, текста, всплывающих окон, разделенных представлений, веб-представлений и элементов управления.
4. Погрузитесь в фреймворки для звука, видео, карт и датчиков
Доступ к пользовательским библиотекам: музыка, фотографии, контакты и календарь
5. Изучите дополнительные темы, включая файлы, сети и потоки.
👍28🔥9❤4
Концепция жизни программы
В контексте модульных языков или языков с ООП — программа рождается, когда появляется минимальный модуль/класс. Затем, после этапа написания некоторого программного кода, программа передается компилятору. Компилятор обеспечивает т.н. compile-time — время компиляции. В результате выполнения процесса компиляции мы получаем компилят (то есть непосредственный результат обработки нашего исходного кода). Во время компиляции наш исходный код влияет на работу компилятора по определенным законам, которые выражены в коде компилятора.
После получения компилята, над ним, сразу или отложенно должен быть исполнен процесс связывания. Возникает время загрузки - load - time.
Запуск и дальнейшая работа. Наиболее известные широкой публике этапы. Представлены временем инициализации (init-time) и временем исполнения (run-time). В сущности, результат работы этого этапа жизненного цикла и является обычно непосредственной целью написания программы. Отдельным важным временем жизни программы является посмертное время (death-time), в которое, вопреки распространенным представлениям тоже является частью жизненного цикла программы.
В контексте модульных языков или языков с ООП — программа рождается, когда появляется минимальный модуль/класс. Затем, после этапа написания некоторого программного кода, программа передается компилятору. Компилятор обеспечивает т.н. compile-time — время компиляции. В результате выполнения процесса компиляции мы получаем компилят (то есть непосредственный результат обработки нашего исходного кода). Во время компиляции наш исходный код влияет на работу компилятора по определенным законам, которые выражены в коде компилятора.
После получения компилята, над ним, сразу или отложенно должен быть исполнен процесс связывания. Возникает время загрузки - load - time.
Запуск и дальнейшая работа. Наиболее известные широкой публике этапы. Представлены временем инициализации (init-time) и временем исполнения (run-time). В сущности, результат работы этого этапа жизненного цикла и является обычно непосредственной целью написания программы. Отдельным важным временем жизни программы является посмертное время (death-time), в которое, вопреки распространенным представлениям тоже является частью жизненного цикла программы.
👍10🔥3❤2
iOS Нотификации. Подписка и рассылка
Нотификации в приложении генерируются из-за событий в самом приложении (например, по таймеру) или по сообщению с сервера. Первые называются локальными, а вторые – пуш-нотификациями.
Пуш-нотификации работают через APNs (Apple Push Notification service). Для отправки сообщения пользователю нужно сформировать запрос к серверу APNs. Это делается разными способами.
Через token соединение.
Через соединение с помощью сертификата.
Статья с практическим примером как реализовать разные виды уведомлений.
Нотификации в приложении генерируются из-за событий в самом приложении (например, по таймеру) или по сообщению с сервера. Первые называются локальными, а вторые – пуш-нотификациями.
Пуш-нотификации работают через APNs (Apple Push Notification service). Для отправки сообщения пользователю нужно сформировать запрос к серверу APNs. Это делается разными способами.
Через token соединение.
Через соединение с помощью сертификата.
Статья с практическим примером как реализовать разные виды уведомлений.
👍14❤4🔥2
Хранение данных Core Data.
Используйте Core Data для сохранения постоянных данных вашего приложения для использования в автономном режиме, для кэширования временных данных и для добавления функций отмены в ваше приложение на одном устройстве. Для синхронизации данных на нескольких устройствах в одной учетной записи. iCloud Core Data автоматически отображает вашу схему в контейнере CloudKit.
С помощью редактора моделей данных Core Data вы определяете типы и взаимосвязи ваших данных и создаете соответствующие определения классов. Затем Core Data может управлять экземплярами объектов во время выполнения для обеспечения следующих функций.
Предоставляю вам материал, который поможет пощупать нативный фрейморк от Apple, понять что это и как использовать на практике. В данном материале вы создадите простой To-Do лист без использования сториборда. Хранить данные будете в базе, используя Core Data.
Используйте Core Data для сохранения постоянных данных вашего приложения для использования в автономном режиме, для кэширования временных данных и для добавления функций отмены в ваше приложение на одном устройстве. Для синхронизации данных на нескольких устройствах в одной учетной записи. iCloud Core Data автоматически отображает вашу схему в контейнере CloudKit.
С помощью редактора моделей данных Core Data вы определяете типы и взаимосвязи ваших данных и создаете соответствующие определения классов. Затем Core Data может управлять экземплярами объектов во время выполнения для обеспечения следующих функций.
Предоставляю вам материал, который поможет пощупать нативный фрейморк от Apple, понять что это и как использовать на практике. В данном материале вы создадите простой To-Do лист без использования сториборда. Хранить данные будете в базе, используя Core Data.
❤14👍2
Как вы знаете, толковых источников с iOS контентом не так уж много, поэтому рекомендую обратить внимание на канал нашего коллеги Mobile Native. Там Артём публикует различные материалы, которые будут полезны разного уровня разработчикам.
Вот несколько топовых постов с канала
👉 Instagram System Design
👉 Deadlocks in Swift explained
👉 Concurrency in iOS: GCD
Подписывайтесь → @mobile_native
Вот несколько топовых постов с канала
👉 Instagram System Design
👉 Deadlocks in Swift explained
👉 Concurrency in iOS: GCD
Подписывайтесь → @mobile_native
❤3👍3🔥2🤔1
iOS вопросы на интервью
Время важно. Бесконечный поиск, чтобы попрактиковаться в вопросах интервью для iOS, утомляет и отнимает много времени. Цель этой статьи — собрать как можно больше вопросов для интервью с iOS вместе с ответами, чтобы сэкономить ваше время.
Предлагаю освежить свои знания, а кому-то узнать что-то новое для себя в данной статьте.
Время важно. Бесконечный поиск, чтобы попрактиковаться в вопросах интервью для iOS, утомляет и отнимает много времени. Цель этой статьи — собрать как можно больше вопросов для интервью с iOS вместе с ответами, чтобы сэкономить ваше время.
Предлагаю освежить свои знания, а кому-то узнать что-то новое для себя в данной статьте.
❤21👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Разработка анимации на iOS — восемь примеров интерфейса с кодом
На WWDC 2018 дизайнеры Apple представили доклад под названием «Разработка текучих интерфейсов», в котором раскрыли детали жестового интерфейса IPhone X.
Если вы попытаетесь реализовать эти идеи на практике, то обнаружите пропасть между идеей и тем, как её воплотить
Цель данной статьи — преодолеть эту пропасть, представив рабочий код для всех примеров из презентации.
Что будет в этой статье:
1. Краткое описание презентации «Проектирование текучих интерфейсов».
2. Восемь текучих интерфейсов, теория дизайна, на которой они строятся, и код для их создания.
3. Практические рекомендации для дизайнеров и разработчиков.
На WWDC 2018 дизайнеры Apple представили доклад под названием «Разработка текучих интерфейсов», в котором раскрыли детали жестового интерфейса IPhone X.
Если вы попытаетесь реализовать эти идеи на практике, то обнаружите пропасть между идеей и тем, как её воплотить
Цель данной статьи — преодолеть эту пропасть, представив рабочий код для всех примеров из презентации.
Что будет в этой статье:
1. Краткое описание презентации «Проектирование текучих интерфейсов».
2. Восемь текучих интерфейсов, теория дизайна, на которой они строятся, и код для их создания.
3. Практические рекомендации для дизайнеров и разработчиков.
❤20👍6👏2
Шаблон координатора с TabBar контроллером
Шаблон координатора - это шаблон в iOS, отвечающий за управление потоками приложений и навигацию между ViewControllers. Это помогает сделать навигационные потоки более управляемыми и более многократно используемыми, а также позволяет нам настраивать их по мере необходимости.
В данной статье автор показывает как можно это реализовать, используя наиболее распространенные потоки: поток входа и основной поток(который включает TabBar контроллер). Используя координатор, мы можем определять потоки приложений и управлять навигацией между ViewController. Читать и смотреть код, в данной статье
Шаблон координатора - это шаблон в iOS, отвечающий за управление потоками приложений и навигацию между ViewControllers. Это помогает сделать навигационные потоки более управляемыми и более многократно используемыми, а также позволяет нам настраивать их по мере необходимости.
В данной статье автор показывает как можно это реализовать, используя наиболее распространенные потоки: поток входа и основной поток(который включает TabBar контроллер). Используя координатор, мы можем определять потоки приложений и управлять навигацией между ViewController. Читать и смотреть код, в данной статье
❤12👍1👏1
Swinject: внедрения зависимостей для Swift
Swinject— это легковесный фреймворк внедрения зависимостей для Swift. Внедрение зависимостей (Dependency injection, DI) — это шаблон проектирования, который реализует инверсию управления (IoC) для разрешения зависимостей.
В этом шаблоне Swinject помогает разделить ваше приложение на слабо связанные компоненты, которые легче разрабатывать, тестировать и поддерживать. Swinject основан на системе универсальных типов Swift и функциях первого класса, позволяющих просто и свободно определять зависимости вашего приложения.
Swinject на GitHub: https://github.com/Swinject/Swinject
Swinject— это легковесный фреймворк внедрения зависимостей для Swift. Внедрение зависимостей (Dependency injection, DI) — это шаблон проектирования, который реализует инверсию управления (IoC) для разрешения зависимостей.
В этом шаблоне Swinject помогает разделить ваше приложение на слабо связанные компоненты, которые легче разрабатывать, тестировать и поддерживать. Swinject основан на системе универсальных типов Swift и функциях первого класса, позволяющих просто и свободно определять зависимости вашего приложения.
Swinject на GitHub: https://github.com/Swinject/Swinject
❤11👍5🤔1😱1
Frame и Bounds
Frame - положение и размер view с использованием системы координат родительского представления (важно для размещения представления в superview).
Bounds - местоположение и размер view с использованием его собственной системы координат (важно для размещения содержимого View или subview внутри него).
Другими словами можно сказать, что Frame - это рамка, Bounds - картинка внутри рамки.
- IntrinsicContentSize (свойство у View) - это размер ĸоторый описывает минимальное пространство для полного отображения ĸонтента.
- Content hugging prioriti - сопротивление на увеличение.
- Content compression resistance - сопротивление на уменьшение.
Другими словами можно сказать, что Frame - это рамка, Bounds - картинка внутри рамки.
- IntrinsicContentSize (свойство у View) - это размер ĸоторый описывает минимальное пространство для полного отображения ĸонтента.
- Content hugging prioriti - сопротивление на увеличение.
- Content compression resistance - сопротивление на уменьшение.
👍21❤5🔥3
Ответ:
Инкапсуляция - это сокрытие реализации класса и отделение его внешнего представления от внутреннего.
Чуть сложнее.
Инкапсуляция – это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе и скрыть детали реализации от пользователя, открыв только то, что необходимо
[Сложность Junior 👶]
👍34🔥4🤔2👏1🎉1
Синтаксический анализ JSON в Swift объясняется примерами кода
Синтаксический анализ JSON в Swift является обычным делом. Почти каждое приложение декодирует JSON для отображения данных в визуализированном виде. Синтаксический анализ JSON, безусловно, является одной из основ, которые вы должны изучить как разработчик iOS.
Декодирование JSON в Swift довольно простое и не требует каких-либо внешних зависимостей. Базовых API, которые поставляются с Swift, будет достаточно, чтобы выполнить эту работу. В данной статье Вас ждут примеры преоброзования из JSON в модели данных, какие протоколы использовать и много много другого.
Статья
Синтаксический анализ JSON в Swift является обычным делом. Почти каждое приложение декодирует JSON для отображения данных в визуализированном виде. Синтаксический анализ JSON, безусловно, является одной из основ, которые вы должны изучить как разработчик iOS.
Декодирование JSON в Swift довольно простое и не требует каких-либо внешних зависимостей. Базовых API, которые поставляются с Swift, будет достаточно, чтобы выполнить эту работу. В данной статье Вас ждут примеры преоброзования из JSON в модели данных, какие протоколы использовать и много много другого.
Статья
👍11❤6🔥2
Зарплаты разработчиков в первой половине 2022: языки и квалификации
Больше всего выросли зарплаты у разработчиков Delphi — на 30% ко второму полугодию 2021. Не изменились зарплаты у тех, кто работает с JS, PHP и Swift.
В первой половине 2022 года разработчики-стажеры зарабатывали 35 000 ₽. Джуны —
70 000 ₽, мидлы — 150 000 ₽, сеньоры — 240 000 ₽, а лиды — 270 000 ₽.
Если сравнивать второе полугодие 2021 года и первое 2022, то зарплаты выросли у всех, кроме стажеров — (-13%). Самый большой рост был у джунов — на 17%.
Иследование можно посмотреть в данной статье.
Больше всего выросли зарплаты у разработчиков Delphi — на 30% ко второму полугодию 2021. Не изменились зарплаты у тех, кто работает с JS, PHP и Swift.
В первой половине 2022 года разработчики-стажеры зарабатывали 35 000 ₽. Джуны —
70 000 ₽, мидлы — 150 000 ₽, сеньоры — 240 000 ₽, а лиды — 270 000 ₽.
Если сравнивать второе полугодие 2021 года и первое 2022, то зарплаты выросли у всех, кроме стажеров — (-13%). Самый большой рост был у джунов — на 17%.
Иследование можно посмотреть в данной статье.
👍7❤2🔥1
Расширение своего кругозора
Всем привет! Рекомендую канал своего хорошего друга Senior Androind Dev. Денис, владелец канала, очень предан своему делу. В разработке он более 7 лет. У него вы лично можете взять консультацию, поучаствовать в собеседовании, задать вопрос абсолютно бесплатно.
Вот некоторые статьи из канала Дениса
1. Как добавить функционал сразу в несколько Activity без использования базового класса?
2. Что такое переопределение?
Рекомендую, подписывайтесь https://t.iss.one/droidev
Всем привет! Рекомендую канал своего хорошего друга Senior Androind Dev. Денис, владелец канала, очень предан своему делу. В разработке он более 7 лет. У него вы лично можете взять консультацию, поучаствовать в собеседовании, задать вопрос абсолютно бесплатно.
Вот некоторые статьи из канала Дениса
1. Как добавить функционал сразу в несколько Activity без использования базового класса?
2. Что такое переопределение?
Рекомендую, подписывайтесь https://t.iss.one/droidev
Telegram
DroidDev : собесы, вопросы, новости
#Middle #Android #Kotlin #Delegate
Как добавить функционал сразу в несколько Activity без использования базового класса?
[Сложность 👨🦰Middle]
Если есть сложности с ответом, то советую прочитать супер короткую статью:
👉 Android Nightmares 😱 | Base classes…
Как добавить функционал сразу в несколько Activity без использования базового класса?
[Сложность 👨🦰Middle]
Если есть сложности с ответом, то советую прочитать супер короткую статью:
👉 Android Nightmares 😱 | Base classes…
👏5❤2👍2