Поговорим еще про потоки.
Процесс описывает выполняющуюся программу (описывает, значит содержит необходимые данные и ресурсы для работы программы), а сама программа же, её процедуры выполняются в потоках. Главное надо понимать, что программа - это не один поток.
Вывод: процесс - это всего лишь способ сгруппировать взаимосвязанные данные и ресурсы, а потоки - единица выполнения (unit of execution), которая распределяется и выполняется на процессоре. Процессы сменяться на процессоре не могут, сменяются и выполняются на процессоре именно потоки.
Процесс описывает программу, в которой есть данные и ресурсы, а потоки позволяют выполнить процесс программы. Т.е, процесс- это всего лишь способ сгрупировать данные, а потоки еденица выполнения
Семафор - это примитив синхронизации, который ограничивает количество потоков, которые могут работать в критической области. Семафор поддерживает подсчитывание количества активизаций семафора, благодаря этому становится возможным пропускать в критическую область более одного потока.
Мьютекс (mutex) - это облегчённый семафор, который не может быть использован как счётчик активизаций, поэтому используется только для обеспечения гарантии, что единовременно с критической областью будет работать только один поток.
Мьютексы могут быть использованы только для взаимного исключения потоков, в отличие от семафоров, которые выполняют также задачу синхронизации потоков.
Мьютекс может находиться только в одном из двух состояний: заблокированном и незаблокированном.
Существуют две операции с мьютексом:
Операция mutex_lock() - блокирует мьютекс. Если мьютекс не заблокирован, то потоку разрешается войти в критическую область. Если же мьютекс уже заблокирован, то поток блокируется в ожидании разблокировки мьютекса другим потоком, который работает с критической областью.
Операция mutex_unlock() - разблокирует мьютекс.
Семафоры следует применять в следующих ситуациях:
1. Нужна синхронизация потоков (требуется наступление какого-то события, один поток сбит пока другой не скажет ему просыпаться)
2. Нужна безопасная общая переменная-счетчик
3. Ограничить количество одновременно работащих в критической области потоков до n штук
Мьютексы следует применять в ситуациях, когда необходимо обеспечить гарантию того, что доступ к критической области будет иметь единовременно только один поток (а не n потоков, в отличие от семафоров). Используется в большинстве ситуаций.
Процесс описывает выполняющуюся программу (описывает, значит содержит необходимые данные и ресурсы для работы программы), а сама программа же, её процедуры выполняются в потоках. Главное надо понимать, что программа - это не один поток.
Вывод: процесс - это всего лишь способ сгруппировать взаимосвязанные данные и ресурсы, а потоки - единица выполнения (unit of execution), которая распределяется и выполняется на процессоре. Процессы сменяться на процессоре не могут, сменяются и выполняются на процессоре именно потоки.
Процесс описывает программу, в которой есть данные и ресурсы, а потоки позволяют выполнить процесс программы. Т.е, процесс- это всего лишь способ сгрупировать данные, а потоки еденица выполнения
Семафор - это примитив синхронизации, который ограничивает количество потоков, которые могут работать в критической области. Семафор поддерживает подсчитывание количества активизаций семафора, благодаря этому становится возможным пропускать в критическую область более одного потока.
Мьютекс (mutex) - это облегчённый семафор, который не может быть использован как счётчик активизаций, поэтому используется только для обеспечения гарантии, что единовременно с критической областью будет работать только один поток.
Мьютексы могут быть использованы только для взаимного исключения потоков, в отличие от семафоров, которые выполняют также задачу синхронизации потоков.
Мьютекс может находиться только в одном из двух состояний: заблокированном и незаблокированном.
Существуют две операции с мьютексом:
Операция mutex_lock() - блокирует мьютекс. Если мьютекс не заблокирован, то потоку разрешается войти в критическую область. Если же мьютекс уже заблокирован, то поток блокируется в ожидании разблокировки мьютекса другим потоком, который работает с критической областью.
Операция mutex_unlock() - разблокирует мьютекс.
Семафоры следует применять в следующих ситуациях:
1. Нужна синхронизация потоков (требуется наступление какого-то события, один поток сбит пока другой не скажет ему просыпаться)
2. Нужна безопасная общая переменная-счетчик
3. Ограничить количество одновременно работащих в критической области потоков до n штук
Мьютексы следует применять в ситуациях, когда необходимо обеспечить гарантию того, что доступ к критической области будет иметь единовременно только один поток (а не n потоков, в отличие от семафоров). Используется в большинстве ситуаций.
🔥11
Коллекции, массивы.
Массив - это упорядоченная набор коллекций, неуникальных значений.
Но это далеко не все, что ты можешь знать о массивах.
В этой статье ты можешь узнать многое о массива, приятного чтения
https://github.com/SomeStay07/iOS-Developer-Roadmap/blob/main/roadmap/Arrays.md
Массив - это упорядоченная набор коллекций, неуникальных значений.
Но это далеко не все, что ты можешь знать о массивах.
В этой статье ты можешь узнать многое о массива, приятного чтения
https://github.com/SomeStay07/iOS-Developer-Roadmap/blob/main/roadmap/Arrays.md
🔥6👍2
🔐 Замыкания – это независимые блоки с определенным функционалом, которые можно передать и использовать в вашем коде. Замыкания в Swift похожи на блоки в C, Objectiv-C и лямбды в других языках программирования.
Замыкания могут захватывать и хранить ссылки на любые константы или переменные из контекста, в котором они были объявлены. Эта процедура известна как заключение этих констанций и переменных, отсюда и название «замыкание».
Синтаксис замыкающего выражения имеет следующую общую форму:
Замыкания могут захватывать и хранить ссылки на любые константы или переменные из контекста, в котором они были объявлены. Эта процедура известна как заключение этих констанций и переменных, отсюда и название «замыкание».
Синтаксис замыкающего выражения имеет следующую общую форму:
{ (параметры) -> тип результата in
выражения
}
❤5🔥3
Краткая история о том, как появился VIPER
MVC превратился в Massive View Controller, т.е. огромный вьюконтроллер, в котором ему позволялось очень много. В нем было много UI и бизнес-логики, и, как следствие, такой код почти невозможно было тестировать, отлаживать и поддерживать.
Поэтому разработчикам понадобилась другая архитектура, которая была бы более-менее гибкой, соответствовала SOLID принципам (особенно "Принципу единственной ответственности") и чистой архитектуре (обзор на русском).
https://apptractor.ru/info/articles/ponimaem-arhitekturu-viper.html
MVC превратился в Massive View Controller, т.е. огромный вьюконтроллер, в котором ему позволялось очень много. В нем было много UI и бизнес-логики, и, как следствие, такой код почти невозможно было тестировать, отлаживать и поддерживать.
Поэтому разработчикам понадобилась другая архитектура, которая была бы более-менее гибкой, соответствовала SOLID принципам (особенно "Принципу единственной ответственности") и чистой архитектуре (обзор на русском).
https://apptractor.ru/info/articles/ponimaem-arhitekturu-viper.html
👍5🔥2
📝Разбираемся в памяти. Когда и что нужно использовать, где применять и как с этим работать.
💻Автор статьи @somestay
https://medium.com/p/types-of-memory-in-swift-b3e7a8cbdf32
💻Автор статьи @somestay
https://medium.com/p/types-of-memory-in-swift-b3e7a8cbdf32
Medium
Types of memory in swift
Static — Allocates memory before starting the program itself. The type of such memory is available for the entire duration of the program…
👍10
Крутой сборник вопросов и задач, которые освежат ваши знания.
https://tproger.ru/articles/sobesedovanie-ios-razrabotchika-voprosy-i-zadanija/
https://tproger.ru/articles/sobesedovanie-ios-razrabotchika-voprosy-i-zadanija/
Tproger
Собеседование iOS разработчика: вопросы и задания
Собрали для вас самые часто используемые вопросы и задания, которые дают iOS разработчикам на собеседованиях.
❤5🔥2
Шаблоны проектирования простым языком. Порождающие шаблоны
Шаблоны проектирования — это руководства по решению повторяющихся проблем. Это не классы, пакеты или библиотеки, которые можно было бы подключить к вашему приложению и сидеть в ожидании чуда. Они скорее являются методиками, как решать определенные проблемы в определенных ситуациях.
Будьте осторожны
шаблоны проектирования не являются решением всех ваших проблем;
не пытайтесь использовать их в обязательном порядке — это может привести к негативным последствиям. Шаблоны — это подходы к решению проблем, а не решения для поиска проблем;
если их правильно использовать в нужных местах, то они могут стать спасением, а иначе могут привести к ужасному беспорядку.
https://tproger.ru/translations/design-patterns-simple-words-1/
Шаблоны проектирования — это руководства по решению повторяющихся проблем. Это не классы, пакеты или библиотеки, которые можно было бы подключить к вашему приложению и сидеть в ожидании чуда. Они скорее являются методиками, как решать определенные проблемы в определенных ситуациях.
Будьте осторожны
шаблоны проектирования не являются решением всех ваших проблем;
не пытайтесь использовать их в обязательном порядке — это может привести к негативным последствиям. Шаблоны — это подходы к решению проблем, а не решения для поиска проблем;
если их правильно использовать в нужных местах, то они могут стать спасением, а иначе могут привести к ужасному беспорядку.
https://tproger.ru/translations/design-patterns-simple-words-1/
Tproger
О порождающих шаблонах проектирования простым языком
Первая статья из цикла, посвящённого шаблонам, или паттернам, проектирования. На понятных примерах объясняем суть порождающих шаблонов.
🔥5❤1
Очень хороший материал с примерами на очень важную тему 🙃
Generics 👍🏻
Материал, конечно, больше для новичков, но от этого он менее хорошим не становится. А сами дженерики используются в куче языков, поэтому разобраться в них точно нужно всем! 🤓
https://www.avanderlee.com/swift/generics-constraints/
Generics 👍🏻
Материал, конечно, больше для новичков, но от этого он менее хорошим не становится. А сами дженерики используются в куче языков, поэтому разобраться в них точно нужно всем! 🤓
https://www.avanderlee.com/swift/generics-constraints/
SwiftLee
Generics in Swift explained with code examples
Generics in Swift prevent code duplication by allowing code to be reused. It's key to know when and how to use generics in your advantage.
👍8🔥2
Хранение и использование кастомных ресурсов (картинки, шрифты, цвета) сейчас есть, наверное, в каждом приложении. И часто в этом всём встречается псевдо-контролируемый хаос 🤯
Так вот, чтобы уйти от иллюзии контроля и действительно начать удобно работать с ресурсами, автор предлагает простой, удобный и type-safe подход 👍
Конечно речь идёт об Assets обвязанных enum-ами. Возможно, многие уже поняли, о чём речь, а может даже и используют так. Но в любом случае, вот статья с примерами удобного подхода к использованию ресурсов в вашем приложении 🔥
https://runhum.medium.com/type-safe-assets-in-swift-798cab38f221
Так вот, чтобы уйти от иллюзии контроля и действительно начать удобно работать с ресурсами, автор предлагает простой, удобный и type-safe подход 👍
Конечно речь идёт об Assets обвязанных enum-ами. Возможно, многие уже поняли, о чём речь, а может даже и используют так. Но в любом случае, вот статья с примерами удобного подхода к использованию ресурсов в вашем приложении 🔥
https://runhum.medium.com/type-safe-assets-in-swift-798cab38f221
Medium
Type-safe assets in Swift
Whenever you need to refer to resources in your apps, whether it be colors, fonts or images, you typically don’t want to use magic strings…
👍5
Swiftly — это универсальный справочник, быстрая шпаргалка для разработчиков Swift. Он содержит справочные примеры использования всех нужных операторов для разработчиков всех уровней.
https://swiftly.dev/
https://swiftly.dev/
🔥15
Как iOS 16 ускоряет запуск вашего приложения.
Эти улучшение связано с ускорением проверок протоколов, которые были медленными. Кроме того, в iOS 16 сокращается время загрузки двоичного файла за счет уменьшения объема данных, загружаемых с диска. Об этом вы также можете прочитать в предыдущей статье.
https://is.gd/CgCtJU
Эти улучшение связано с ускорением проверок протоколов, которые были медленными. Кроме того, в iOS 16 сокращается время загрузки двоичного файла за счет уменьшения объема данных, загружаемых с диска. Об этом вы также можете прочитать в предыдущей статье.
https://is.gd/CgCtJU
Emergetools
Emerge Tools Blog | The Surprising Cost of Protocol Conformances in Swift
A deep dive into the Swift runtime to see how protocol conformance checks slow down post-main startup time as your binary size increases.
🔥2
Решить, какую структуру данных использовать для представления заданного набора значений, часто бывает намного сложнее, чем кажется
Стандартная библиотека Swift поставляется с тремя основными структурами данных — Array, Dictionary и Set, каждая из которых имеет свой набор оптимизаций, плюсов и минусов.
Подробнее про типы коллекций, можно озанакомиться в данной статье.
https://habr.com/ru/company/otus/blog/468239/
Стандартная библиотека Swift поставляется с тремя основными структурами данных — Array, Dictionary и Set, каждая из которых имеет свой набор оптимизаций, плюсов и минусов.
Подробнее про типы коллекций, можно озанакомиться в данной статье.
https://habr.com/ru/company/otus/blog/468239/
Хабр
Выбираем правильную структуру данных в Swift
И снова здравствуйте. Прежде чем уйти на выходные хотим поделиться с вами переводом материала, который был подготовлен специально для базового курса «iOS-разрабо...
🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
🛠Одним из не то, чтобы новых, но незаменимых классов в UIKit является
Если вы не знаете, что такое bottom sheet, откройте встроенное приложение «Карты», чтобы посмотреть. На нем отображается bottom sheet, на котором пользователи могут выполнять поиск и получать доступ к сохраненным местоположениям. Вы можете развернуть и свернуть его. Также этот тип шаблона пользовательского интерфейса можно найти в некоторых популярных приложениях, таких как Google Maps, Twitter и Instagram.
🔴 Теперь к коду.
Вы можете указать размер контроллера, установив свойство
UISheetPresentationController
. Этот класс позволяет легко создать раскрываемый bottom sheet всего с несколькими строками кода.Если вы не знаете, что такое bottom sheet, откройте встроенное приложение «Карты», чтобы посмотреть. На нем отображается bottom sheet, на котором пользователи могут выполнять поиск и получать доступ к сохраненным местоположениям. Вы можете развернуть и свернуть его. Также этот тип шаблона пользовательского интерфейса можно найти в некоторых популярных приложениях, таких как Google Maps, Twitter и Instagram.
🔴 Теперь к коду.
Вы можете указать размер контроллера, установив свойство
detents
. Вот пример, показывающий, как установить размер bottom sheet:let webViewController = WebViewController()
if let sheet = webViewController.sheetPresentationController {
sheet.detents = [ .medium(), .large() ]
}
present(webViewController, animated: true)
👍13
Руководство по современному асинхронному программированию
https://quickbirdstudios.com/blog/async-await-combine-closures/
https://quickbirdstudios.com/blog/async-await-combine-closures/
QuickBird Studios
Combine, Closures: A Guide to Modern Asynchronous Swift
A comparison between async/await, Combine, and closures in Swift. Includes an overview of the strengths and weaknesses of the different approaches.
🔥5
Коротенькая, но очень полезная статья с парой фишек для дебага в Xcode 🔨
Тут есть и совсем простые вещи вроде
В общем переходите по ссылке и смотрите. Всего несколько минут, зато что-то полезное можно узнать! 👍
https://medium.com/@dbelannab/xcode-debugging-tips-and-tricks-c2f4db49553e
Тут есть и совсем простые вещи вроде
po
команды в логе (я удивлён, но очень многие об этом почему-то не знают) и symbolic breakpoint
, до более интересных и менее популярных вещей из разряда команды v
для того же lldb
и изменений при дебаге без необходимости пересобирать проект 🔥В общем переходите по ссылке и смотрите. Всего несколько минут, зато что-то полезное можно узнать! 👍
https://medium.com/@dbelannab/xcode-debugging-tips-and-tricks-c2f4db49553e
Medium
Xcode Debugging tips and tricks
As a lazy software engineer, I always look for shortcuts to complete my tasks. And since we spend half of our times debugging let me share…
👍5🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Кастомный TabBar
Статья состоит из трёх частей, как реализовать вот такой таббар.
https://betterprogramming.pub/how-to-create-a-nice-uitabbar-for-your-ios-app-using-swift-5-pt-1-f9d2d5450909
Статья состоит из трёх частей, как реализовать вот такой таббар.
https://betterprogramming.pub/how-to-create-a-nice-uitabbar-for-your-ios-app-using-swift-5-pt-1-f9d2d5450909
🎉4❤2