Привет, Хабр! Всем нравятся отзывчивые приложения. Ещё лучше, когда в них есть уместные анимации. В этой статье я расскажу и покажу со всем «мясом», как правильно показывать, скрывать, крутить, вертеть и делать всякое с всплывающими экранами.
iOS developer
Управление памятью в Swift
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/028/66e/f7e/02866ef7eed831b3d10b8ffc42717add.png)
Об управление памятью в iOS ходят много слухов, поэтому я собрал все самые интересные в интернете и попробовал их структурировать в один большой
Как устроен счетчик ссылок в Swift
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/e29/94e/b5b/e2994eb5bb02817e0c8ddfe82728a1d8.png)
Мы в iOS команде Vivid Money стремимся глубже понимать инструменты, которыми пользуемся каждый день. Один из таких – это язык программирования Swift. Он состоит из нескольких частей: компилятора, стандартной библиотеки и рантайма. Компилятор преобразует код понятный для человека в код понятный компьютеру. Стандартная библиотека предоставляет разработчикам готовые структуры данных, оптимизированные для применения в боевых проектах. А вот рантайм – это, поистине, сердце языка. В нем происходит выделение памяти, динамическое приведение типов и подсчет ссылок. И нам стало интересно, как реализован подсчет ссылок в рантайме. И вот мы вдохновились публикациями легендарного Майка Эша (Mike Ash), собрали компилятор и начали исследовать. Посмотрели на работу алгоритма подсчета ссылок и в этой статье расскажем вам о нём.
IOS Run Loop: Что? Когда? Зачем?
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/104/eba/ef3/104ebaef3c42bcf3d62edd5f31491bd5.png)
Run Loop (цикл исполнения) является механизмом, который позволяет потокам обрабатывать события (events) бесконечно в любое время.
Run Loop представляет из себя объект, который управляет событиями и сообщениями, обрабатывает их, и предоставляет функцию точки входа для выполнения логики события.
Как подготовиться к iOS-собеседованию
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/2a1/c41/daf/2a1c41daf4e602475295a1d387fe2168.png)
Всем привет! Меня зовут Илья, и я провожу собеседования *хлоп-хлоп-хлоп*. Сейчас работаю на позиции Principal iOS Engineer в inDriver, и мой фокус смещен в сторону технических собеседований. До этого руководил мобильной разработкой в в «Альфа-Банке» и был кем-то вроде нанимающего менеджера. Это тот человек, который говорит финальное слово по кандидату и определяет, какую циферку написать в оффере. Помимо «рабочих» собеседований, я иногда собеседую на аутсорсе, а также помогаю разработчикам к ним готовиться.
В общем, собеседования давно стали частью моей жизни. В этой статье мы верхнеуровнево пройдемся по всем этапам этого процесса, от идеи до офера, и обсудим, как успешно дойти до конца.
Принципы для разработки: KISS, DRY, YAGNI, BDUF, SOLID, APO и бритва Оккама
![image](https://miro.medium.com/max/3800/1*RQJCJDy_JxfRXPvSpkN3Jg.png)
Хорошему программисту необходимо уметь совмещать свои навыки со здравым смыслом. Все дело в прагматизме и навыке выбора лучшего решения для вашей проблемы. Когда вы сталкиваетесь с проблемой при разработке ПО, вы можете воспользоваться базовыми принципами, которые помогут в выборе самого правильного подхода.
В этом тексте приводится набор принципов, которые должен знать любой разработчик, и которые следует периодически освежать в памяти. Считайте их своим секретным оружием при программировании.
Последовательное применение этих принципов упростит ваш переход от миддла к сеньору. Вы можете обнаружить, что некоторые (вероятно) вы применяете интуитивно.
Принципов много. Мы остановимся на семи самых важных. Их использование поможет вам в развитии и позволит стать лучшим программистом.
1. YAGNI
You Aren’t Gonna Need It / Вам это не понадобитсяЭтот принцип прост и очевиден, но ему далеко не все следуют. Если пишете код, то будьте уверены, что он вам понадобится. Не пишите код, если думаете, что он пригодится позже.
Этот принцип применим при рефакторинге. Если вы занимаетесь рефакторингом метода, класса или файла, не бойтесь удалять лишние методы. Даже если раньше они были полезны – теперь они не нужны.
Может наступить день, когда они снова понадобятся – тогда вы сможете воспользоваться git-репозиторием, чтобы воскресить их из мертвых.
iOS. UI. Приёмы. Часть 2
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/8ee/77d/287/8ee77d287a1e0e62a7cecbc9fa11687a.png)
Привет читателям хабра! В прошлой статье рассказывал про тени и маски у CALayer-ов. В этой расскажу про некоторые подходы при работе с коллекциями и кастомными layout-ами, опять же демонстрируя всё на довольно интересных, на мой взгляд, примерах.
Про многопоточность 2. GCD
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/fd1/105/889/fd11058892a4a97473deefe5451a2b33.png)
Привет! Вот и новая часть серии статей про многопоточность дождалась своей очереди (ну вы поняли, да, типа очередь статей последовательная (͡° ͜ʖ ͡°) ). В этот раз мы поднимемся на ступеньку выше, рассмотрим фреймфорк Dispatch, разберем большую часть GCD примитивов, распространенные проблемы и поищем решения.
Мой уход из Яндекса, как не потерять мотивацию за полгода подготовки в FAANG и реджект в Google
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/d8b/428/24c/d8b42824c97b5c658fa234d0c51163a5.jpeg)
Мой уход из Яндекса, как не потерять мотивацию за полгода подготовки в FAANG и реджект в Google.
Понимаем красно-черное дерево. Часть 1. Введение
Довольно долгое время я воевал с красно-черным деревом. Вся информация, которую я находил, была в духе "листья и корень дерева всегда черные, ПОТОМУ ЧТО", "топ 5 свойств красно-черного дерева" или "3 случая при балансировке и 12 случаев при удалении ноды". Такой расклад меня не устраивал.
Мне не хотелось заучивать свойства дерева, псевдокод и варианты балансировки, я хотел знать: почему. Каким образом цвета помогают при балансировке? Почему у красной ноды не может быть красного потомка? Почему глубину дерева измеряют "черной высотой"?
Ответы на эти вопросы я получил только тогда, когда мне дали ссылку на лекцию про два-три дерево, с которого мы и начнем.
Эта статья разделена на 3 логические части. Я рекомендую прочитать их в указанном порядке. Первая часть (данная) будет направлена на введение в кчд и знакомство с ним. Во второй части мы поговорим о балансировке и вставке в кчд. В третьей, завершающей, части мы разберем процесс удаления ноды. Наберитесь терпения и приятного чтения.
iOS. UI. Приëмы. Часть 1
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/af2/7ca/da9/af27cada9303ce904e563ee0c41ca6e0.png)
Привет читателям Хабра!
Я iOS-разработчик, и так случилось, что мне приходилось много делать в ui: кастомные view, тени, layout-ы, кнопки и вот это всё. В этой и паре следующих статей хочу поделиться некоторыми приёмами, которые помогали мне добиваться весьма красивых и интересных эффектов в плане рисования компонентов ui. Надеюсь, кому-нибудь это будет полезно. Ну или просто интересно.
Память в Swift от 0 до 1
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/442/951/cac/442951cac3ee0ad0e273191370cf1c08.jpg)
В этой статье мы рассмотрим принципы работы памяти в Swift и разберемся, как Swift располагает байты в памяти, как управляет памятью и что из себя представляет жизненный цикл объектов.
Как я изучал структуры данных и алгоритмы для собеседования в FAANG
Эта история началась в 2015 году, когда стартап, к которому я присоединился как «сотрудник-основатель», закрылся через шесть месяцев после первого раунда инвестиций, и я искал новую работу. Первое моё собеседование было с Codecademy, где на этапе телефонного разговора меня заверили: «Не волнуйтесь, мы не задаём сумасшедших вопросов об алгоритмах или что-то в этом роде». И я им поверил…
![](https://habrastorage.org/webt/gm/jt/8x/gmjt8xicn7-jb1segtxrv0kkrxc.png)
Как я готовился к собеседованию в Google
![](https://habrastorage.org/webt/x8/ub/ha/x8ubhawrp_hajlvbel5ov5lejoq.jpeg)
Система сборки Xcode: advanced tutorial
![image](https://habrastorage.org/files/9d4/778/bbd/9d4778bbdb8442e1a55fa9f974084485.png)
Конфигурация проекта в Xcode выглядит, как пульт управления космическим кораблем. Зачастую люди понимают, как работает система сборки, но путают термины. В этой статье мы пройдемся по структуре проекта, таргетам, настройкам конфигураций и воркспейсам. Поехали!
Алгоритмы и структуры данных поиска. Лекции и курсы от Яндекса
В этом курсе рассматриваются базовые алгоритмы и структуры данных, включая хешировани, сложность и модели вычислений, деревья поиска, B-деревья, задачи геометрического поиска, динамическую связность в графах и другое.
Мы учли то, о чём нас просили в комментариях к прошлым курсам — теперь при желании можно не только смотреть/скачивать лекции по отдельности, но и загрузить всё разом в виде открытой папки на Яндекс.Диске. Кстати — в предыдущих постах тоже появились такие же апдейты (вот ссылки для удобства: «машинное обучение», «дискретный анализ и теория вероятностей», «параллельные и распределённые вычисления»).
Лекции читает Максим Александрович Бабенко, заместитель директора отделения computer science, ассистент кафедры математической логики и теории алгоритмов механико-математического факультета МГУ им. М. В. Ломоносова, кандидат физико-математических наук.
Многопоточность (concurrency) в Swift 3. GCD и Dispatch Queues
Итак, у вас есть приложение, оно работает на
main thread
(главном потоке), который отвечает за выполнение кода, отображающего ваш пользовательский интерфейс (UI
). Как только вы начинаете добавлять к вашему приложению такие «затратные по времени» куски кода, как загрузка данных из сети или обработка изображений на main thread
(главном потоке), то работа вашего UI
начинает сильно замедляться и даже может привести к полному его «замораживанию». ![](https://habrastorage.org/files/d6b/e2f/372/d6be2f372083452f922723c9c934e811.png)
Как можно изменить архитектуру приложения, чтобы таких проблем не возникало? В этом случае на помощь приходит многопоточность (
сoncurrency
), которая позволяет одновременно выполнять две или более независимые задачи (tasks
): вычисления, загрузку данных из сети или с диска, обработку изображений и т.д.Видео докладов с CocoaHeads @ FunCorp митапа
![](https://habrastorage.org/webt/zo/ou/wk/zoouwkn2lidr_kcx5rr8sae_zky.jpeg)
25-го августа мы (FunCorp) совместно c CocoaHeads провели iOS митап. А сегодня для тех, кто не смог посетить мероприятие и посмотреть трансляцию, выкладываем записи докладов.
Материалы для обучения разработке iOS приложений и составления учебных планов junior, middle и senior iOS разработчиков
![](https://habrastorage.org/r/w780/getpro/habr/upload_files/7ec/92c/2d6/7ec92c2d6e376aaa5ae1806abcf7c4cb.jpg)
Если вы хотите научиться iOS разработке, если вы уже разрабатываете под iOS и хотите повысить свой уровень или вы выступаете в роли лида или ментора, который отвечает за составление индивидуальных планов обучения, у меня есть кое-что для вас - вручную отобранный список материалов для профессиональной iOS разработки: книги, статьи, курсы и инструменты.
Информация
- В рейтинге
- Не участвует
- Зарегистрирован
- Активность