iOS Makes Me Hate
3.94K subscribers
1.16K photos
167 videos
15 files
1.33K links
Авторский канал про iOS разработку. Путь продуктовых самураев в MAANG.

Самое больше iOS сообщество практиков: https://boosty.to/lionbond/

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
Что такое AutoreleasePool?

AutoreleasePool позволяет явно управлять тем, когда объекты освобождаются. Он помогает уменьшить максимальный объем памяти занимаемый приложением, нужен когда создаем много тяжелых объектов в цикле. Использование AutoreleasePool актуально, когда мы работаем с объектами, унаследованными от NSObject и возвращаемыми с вызовом autorelease (например, UIImage, NSData/Data)

Пул управляет объектами, для которых был вызван метод autorelease. Объекты, которые удаляются через release, не попадают в пул, а сразу удаляются. Приложение создает авторелиз пул на главном потоке автоматически в начале каждого цикла обработки событий в RunLoop. Он очищается автоматичски в конце цикла.

У каждого потока свой стэк пулов. Новые объекты помещаются в самый последний пул в стэке пулов потока. Когда поток умирает, все пулы его автоматически очищаютс

- Autoreleasepool в Swift
- Что такое Autorelease Pool
- Дока
👍12
Dependency Injection vs Service Locator

В книге Внедрение зависимостей на платформе .NET есть хорошее определение двум паттернам, которые часто друг с другом путают:

💭Классы не должны запрашивать свои зависимости у третьей стороны. Такие действия вписываются в антипаттерн под названием «Локатор сервисов» (Service Locator). Вместо этого классы должны указывать требуемые им зависимости статически, используя параметры конструктора, то есть практиковать прием под названием «внедрение через конструктор» (Constructor Injection)

Итак. Service Locator является противоположностью DI.

С помощью DI классу присваиваются его зависимости. Он не знает и не заботится о том, откуда они берутся.

Но почему Service Locator является антипаттерном?

В наиболее часто встречающемся варианте он является статической фабрикой, которая может настраиваться на использование конкретных сервисов еще до того, как ей начнет пользоваться первый потребитель

😁 Основная проблема при использовании локатора сервисов состоит в том, что он влияет на возможность повторного использования классов-потребителей. Это проявляется двояко:
- ‰‰класс тащит за собой локатор сервисов как избыточную зависимость
- ‰класс скрывает очевидность своих зависимостей

Но DI-контейнер, заключенный в корень композиции, локатором сервисов не является. Он представляет собой компонент инфраструктуры.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1
Прикольная шпаргалка по mobile system design для собесов.

Все же изучая всякие практики и читая теории можно сказать, что детали в проектировании бэка, веба и мобилки — разные, из-за разных деталей платформ
5👍2❤‍🔥1🔥1
Интересная серия твитов про, binary size, скорость сборки, какие алгоритмы использует система, почему всякие экзистенциальные контейнеры ее тормозят
1
Understanding Swift Performance

Все же нет ни одной статьи про память в iOS, которая справилась бы лучше этой сессии на WWDC 2016. Такой пристарелый материал, но почему-то мало кому пришлось его осилить. А ведь правда, чтобы понять всё, что там говорят — нужно смотреть пару раз.

Теперь, отвечая на вопрос на память и типы вы легко можете:
▫️Объяснять стэк и кучу в Swift
▫️Что такое экзистенциальный контейнер
▫️Как память тесно связана с диспетчеризацией

В следующих постах подробнее поговорим про это, а пока можно почитать:

1️⃣ Протокольно ориентированное программирование
2️⃣Протокольно ориентированное программирование 2
3️⃣Протокольно ориентированное программирование 3
👍14
Existential Container

На этапе компиляции нам требуется узнать размеры аргументов функции, чтобы положить их в стэк, если они будут разного размера

Компилятор Swift сгенерирует код, который автоматически упаковывает это значение в "экзистенциальный контейнер"

По умолчанию выделяется 3 машинных слова. Если размер превышает их, то в куче выделяется поле, которое управляется ARC и значение копируется туда. Указатель на поле копируется в первое поле, а остальные 2 слова не используются.

По своей сути экзистенциальный контейнер — это просто коробка фиксированного размера.

🚘 Здесь появляются дополнительные тонкости. В следующих постах поговорим про Protocol/Value Witness Table

- Связь между экземпляром структуры и методом протокола
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍1
Управление памятью и производительность типов значений

Нужно ли понимать архитектуру памяти обычным разрабам? Автор нашего любимого блога в статье считает, что прикладным разрабам не нужно знать, как сэкономить пару байтов. А тем более это делать преждевременно.

Но если все же интересно, то можно почитать статью и сравнить
- Куча общая для потоков, а значит память выделяется медленней.
- Когда value type выделяются в куче?
🔥7
В прошлую пятницу у меня был выбор: либо уехать в казахстан на пару недель, пока все не закрыли и встретить родственников. Либо поступить на вышку, которая в теории меня забронирует. Я выбрал второе.

Высшее образование не сказал бы, что большая, но колющая тема. Как я уже говорил, вся моя семья — учителя. У всех по несколько дипломов. А я не смог после колледжа совмещать работу и учебу на очке, и ушел вообще с высшего. Причем специальность была из списка на отсрочку. Впервые я пожалел, что отчислился)

Сейчас, скажем так, ценности поменялись 🤡 Значимость высшего образования также остается под вопросом, но она выросла психологически и социально. Без него, наверное, работадатель будет сомневаться, ибо ему сложно будет защитить от невнятного призыва. Дополнительные же гарантии помогут лучше планировать с нами работу.

Какое образование я выбрал? Да, которое было. Бизнес-информатик. Если познакомиться с программой обучения на следующие 4 года и 11 месяцев, то может показаться, что это бюджетная российская копия MBA.

Как начну учиться — буду делиться интересными знаниями. Если доживем к диплому, сделаем сравнение.

Можно ли назвать это первым реалити шоу, где мы все будем анализировать ценность высшего 5 лет?
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳10🔥6👍2🌭1
Вопрос из зала: че выведет в консоль?
Какой будет ответ?
Anonymous Quiz
50%
true
24%
false
21%
Ошибка
4%
Краш
1%
nil
👍3
Проблемы с синглтонами и почему вместо них следует использовать DI

Эта тема уже задевалась вскольз, когда сравнивали сервис локатор и DI. Тут как раз статья вышла

Проблема синглтонов:

1. Риск гонки из-за доступа с разных классов
2. Ненастраиваемые инициализаторы
3. Сложность с мокированием данных

DI — это паттерн, который помогает инициализировать зависимость почти в начале композиции нашей апки, а потом внедрить.

Чаще всего внедрение происходит через инициализаторы и протоколы. Так мы можем легко контролировать переданные модули
👍3
Авито запустило стажировку, если вы помните.

Если учитесь на 3 курсе и старше, либо уже получили диплом по технической, математической или IT-специальности. А возможно, прошли курс переподготовки в IT.

🤑 Стажировка оплачивается

🏠 можно работать на удаленке

⌛️ продолжительность 6 месяцев

Знаю, кому-то будет полезно. Заявки принимают еще 10 дней
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😍4❤‍🔥2🏆1
Ха ха

Когда я копирую доку и книги — какой-то Timi Stark копирует меня в медиуме, переводя на английский дословно.

Кто ты без своего гугл переводчика?
Миллионер, Араб, иосер

Можно ли называть себя гордым словом РУССКИМ ПРОГРАММИСТОМ
😁9🌚4
А че может кто знает книги по нормальным языкам? Для Дронов писать по или ПВО симуляторы?

Чет заинтересовала тема с военным программным обеспечением и как красить пусковые кнопки
😁5😐2🤔1
А я напоминаю, что выкладываю разные интересные мне книги в другой канал. Там не только про иос

Также и те книги, которыми делятся подписчики

https://t.iss.one/iosmmcresources
👍7❤‍🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
AnimationTimer

Пример приложения, запускающего NSTimer, CADisplayLink и DispatchSourceTimer в фоновом потоке, чтобы предотвратить задержки анимации, когда основной поток занят.

Еще одна причина углубиться в таймеры и оптимизировать анимации.

- Подробнее про таймеры
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2🍓1