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

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

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
"Методы принятия решений"

Сейчас эта книга особенно важна.

Решил перечитать пару глав. Вся книга состоит из статей.

Когнитивные искажения — яд для ума. Каким бы мы разумом не обладали, но не тренируя защиту от уловок сделаем неверные решения.

#books
👍9🤔31🕊1
Когда мемы становится реальностью…
🔥8🤔21😁1
Deep Copy vs Shallow Copy

🟢 lvl: jun

1️⃣ Deep Copy — это копирование, которое делает дубликат всего. Глубокое копирование у нас работает для структур.

2️⃣ Shallow Copy — это поверхностное копирование, которое используется в ref типах. Поверхностные копии быстрее, чем глубокая копия, из-за совместного использования только ссылки. Созданная копия не создает полностью новый экземпляр в памяти, копируется только адрес

Можем ли мы сделать глубокую копию ссылочного типа?

Да. Можно использовать NSCopying или написать свой метод, копирующий все значения в новый экземпляр.

Отличия между Deep Copy and Shallow Copy
9
ARC Performance

🟡 lvl: mid

На собесах очень любят спрашивать про перфоманс всяких ссылок. Что быстрее? Weak, Strong, Unowned(safe), Unowned(unsafe).

Чаще это информация только на собесе и пригодится. Но я решил замерить че, кто, кого и куда

ℹ️ Оказалось, что weak (force unwrapping) не намного медленней обычного unowned(safe). Вопреки тому, что большую часть времени отбирает создание сайд таблицы. А вот weak safe unwrapping намного медленней

Самым быстрым оказались unowned(unsafe) и strong ссылки.

Как вы думаете почему так и расскажите, где это вам пригождалось?

- Weak намного медленнее Strong
- ARC Performace
🔥13
Пока летал к себе в Тюмень за зимними вещами, решил перечитать одну из любимых книг

Ментальное состояние шатается по 9 балльной шкале. Поэтому нужна какая-то крепкая опора. Когда-то я нашел ее для себя в учении стоиков, но время снова реабилитироваться

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

Поделюсь еще книжками:

"Сказать жизни «Да!»: психолог в концлагере" Виктор Фракл. Одна из актуальных книг последних 10 лет. Не удивлено, ведь это современный стоик, о ком упоминается в книге выше.

"Цитадель" Экзюпери. Мало кто знал, но автор "Маленького принца" был военным летчиком и тонким психологом. Цитадель — моя любимая работа, которая в 2018 стала для меня книгой года и сильно на меня повлияла, сформировав внутренний кодекс

Делитесь тем, что помогает вам, кроме релокации 🤡
Please open Telegram to view this post
VIEW IN TELEGRAM
👍124😐1
Unsafe Swift: A road to Memory

🟠 lvl: mid

Swift — безопасный для памяти язык. Он ограничивает прямой доступ к памяти и гарантирует, что вы инициализировали все перед использованием. Небезопасные API-интерфейсы Swift позволяют вам обращаться к памяти напрямую через указатели. А это значит, что получаем доступ быстрее.

Но что такое эта безопасность? Чем мы рискуем? Крэшем или его отсутствие? 🤬

Safe Memory — это поведение, когда наше приложение крашнится.
Unsafe Memory — наше приложение будет работать, но получится непредсказуемый результат.

🚨 Таким образом непредсказуемое поведение страшнее краша

- unsafe pointer
- Road to Memory
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Почему опциональный closure является по-умолчанию escaping?

Опциональные функции не являются функциями, а являются enum'ом

Ни дня без важных фактов 🍑
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
Благодаря менторству, на разных площадках и индивидуально, некоторые темы я сам открываю для себя с другой стороны.

Здорово, что я тоже нахожу что-то интересное для себя благодаря вашим вопросам. Например пост выше про опциональный клоужер и некоторые детали memory safety.

Сейчас нет особо времени и сил (сорри всем, кому отменил занятия или отказал). Голова взрывается от перебора вариантов, высасывая все силы. Хотя бьешь по рукам себя и ругаешь не делать так. Уверен, многие сейчас в такой же ситуации.

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

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

Какие вопросы вам задал ваш тимлид, на очередном собесе задушили, или понтовался ваш коллега. Так мы можем сформулировать и разобраться любой вопрос
16
Side table появляется в трех случаях:

1️⃣когда появляется первая weak ссылка на обьект
2️⃣strong или unowned ссылки переполняются (вылезают за 32/64-bit)
3️⃣объекту надо сохранить associated object

- Discover side tables
- Deep dive into swift reference counting
- RefCount
14👍6
Что такое 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