Почему опциональный closure является по-умолчанию escaping?
Опциональные функции не являются функциями, а являются enum'ом
Ни дня без важных фактов🍑
Опциональные функции не являются функциями, а являются enum'ом
Ни дня без важных фактов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
Благодаря менторству, на разных площадках и индивидуально, некоторые темы я сам открываю для себя с другой стороны.
Здорово, что я тоже нахожу что-то интересное для себя благодаря вашим вопросам. Например пост выше про опциональный клоужер и некоторые детали memory safety.
Сейчас нет особо времени и сил (сорри всем, кому отменил занятия или отказал). Голова взрывается от перебора вариантов, высасывая все силы. Хотя бьешь по рукам себя и ругаешь не делать так. Уверен, многие сейчас в такой же ситуации.
Нужно понемногу снова реабилитироваться после очередной информационной контузии, продолжая идти вперед, пересмотрев и приняв.
Вы в любой момент можете написать в лс, чат или комменты, то что хотите разобрать.
Какие вопросы вам задал ваш тимлид, на очередном собесе задушили, или понтовался ваш коллега. Так мы можем сформулировать и разобраться любой вопрос
Здорово, что я тоже нахожу что-то интересное для себя благодаря вашим вопросам. Например пост выше про опциональный клоужер и некоторые детали memory safety.
Сейчас нет особо времени и сил (сорри всем, кому отменил занятия или отказал). Голова взрывается от перебора вариантов, высасывая все силы. Хотя бьешь по рукам себя и ругаешь не делать так. Уверен, многие сейчас в такой же ситуации.
Нужно понемногу снова реабилитироваться после очередной информационной контузии, продолжая идти вперед, пересмотрев и приняв.
Вы в любой момент можете написать в лс, чат или комменты, то что хотите разобрать.
Какие вопросы вам задал ваш тимлид, на очередном собесе задушили, или понтовался ваш коллега. Так мы можем сформулировать и разобраться любой вопрос
❤16
В каких случаях создается Side Table?
Anonymous Poll
85%
При появлении первой weak ссылки на объект
11%
При инициализации класса
25%
Strong или unowned ссылки переполняются
2%
При deinit'е
10%
При захвата значений
2%
Никогда
Side table появляется в трех случаях:
1️⃣когда появляется первая weak ссылка на обьект
2️⃣strong или unowned ссылки переполняются (вылезают за 32/64-bit)
3️⃣объекту надо сохранить associated object
- Discover side tables
- Deep dive into swift reference counting
- RefCount
1️⃣когда появляется первая weak ссылка на обьект
2️⃣strong или unowned ссылки переполняются (вылезают за 32/64-bit)
3️⃣объекту надо сохранить associated object
- Discover side tables
- Deep dive into swift reference counting
- RefCount
❤14👍6
На каком потоке вызывается deinit?
Anonymous Quiz
18%
На главном
30%
На том, в котором был вызван release
11%
На том, в котором был вызван retain
22%
На том, в котором был инициализирован класс
19%
deinit не вызывается в потоках
👍11
Что такое AutoreleasePool?
AutoreleasePool позволяет явно управлять тем, когда объекты освобождаются. Он помогает уменьшить максимальный объем памяти занимаемый приложением, нужен когда создаем много тяжелых объектов в цикле. Использование AutoreleasePool актуально, когда мы работаем с объектами, унаследованными от NSObject и возвращаемыми с вызовом autorelease (например, UIImage, NSData/Data)
Пул управляет объектами, для которых был вызван метод autorelease. Объекты, которые удаляются через release, не попадают в пул, а сразу удаляются. Приложение создает авторелиз пул на главном потоке автоматически в начале каждого цикла обработки событий в RunLoop. Он очищается автоматичски в конце цикла.
У каждого потока свой стэк пулов. Новые объекты помещаются в самый последний пул в стэке пулов потока. Когда поток умирает, все пулы его автоматически очищаютс
- Autoreleasepool в Swift
- Что такое Autorelease Pool
- Дока
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-контейнер, заключенный в корень композиции, локатором сервисов не является. Он представляет собой компонент инфраструктуры.
В книге Внедрение зависимостей на платформе .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
Все же нет ни одной статьи про память в iOS, которая справилась бы лучше этой сессии на WWDC 2016. Такой пристарелый материал, но почему-то мало кому пришлось его осилить. А ведь правда, чтобы понять всё, что там говорят — нужно смотреть пару раз.
Теперь, отвечая на вопрос на память и типы вы легко можете:
▫️Объяснять стэк и кучу в Swift
▫️Что такое экзистенциальный контейнер
▫️Как память тесно связана с диспетчеризацией
В следующих постах подробнее поговорим про это, а пока можно почитать:
1️⃣ Протокольно ориентированное программирование
2️⃣Протокольно ориентированное программирование 2
3️⃣Протокольно ориентированное программирование 3
👍14
Че там по думскроллингу?
Дорофеев, тот самый чел с "Джедайскими привычками" (популярная в ит и не только), выпустил ролик по борьбе с актуальными проблемами
https://www.youtube.com/watch?v=TVNamQ6cRFU
Дорофеев, тот самый чел с "Джедайскими привычками" (популярная в ит и не только), выпустил ролик по борьбе с актуальными проблемами
https://www.youtube.com/watch?v=TVNamQ6cRFU
YouTube
Как перестать читать новости? (разрушаем пагубные привычки, думскроллинг и прокрастинацию)
Приходите к нам учиться:
- Джедайские техники (про экономию мыслетоплива): https://sprint.mnogosdelal.ru/
- Хулилогика (про работу с мышлением): https://logic.mnogosdelal.ru/
- Как 'нечитать' книги и работать с входящей информацией: https://books.mnogosdelal.ru/…
- Джедайские техники (про экономию мыслетоплива): https://sprint.mnogosdelal.ru/
- Хулилогика (про работу с мышлением): https://logic.mnogosdelal.ru/
- Как 'нечитать' книги и работать с входящей информацией: https://books.mnogosdelal.ru/…
👍5
Existential Container
❔ На этапе компиляции нам требуется узнать размеры аргументов функции, чтобы положить их в стэк, если они будут разного размера
Компилятор Swift сгенерирует код, который автоматически упаковывает это значение в "экзистенциальный контейнер"
По умолчанию выделяется 3 машинных слова. Если размер превышает их, то в куче выделяется поле, которое управляется ARC и значение копируется туда. Указатель на поле копируется в первое поле, а остальные 2 слова не используются.
По своей сути экзистенциальный контейнер — это просто коробка фиксированного размера.
🚘 Здесь появляются дополнительные тонкости. В следующих постах поговорим про Protocol/Value Witness Table
- Связь между экземпляром структуры и методом протокола
Компилятор Swift сгенерирует код, который автоматически упаковывает это значение в "экзистенциальный контейнер"
По умолчанию выделяется 3 машинных слова. Если размер превышает их, то в куче выделяется поле, которое управляется ARC и значение копируется туда. Указатель на поле копируется в первое поле, а остальные 2 слова не используются.
По своей сути экзистенциальный контейнер — это просто коробка фиксированного размера.
- Связь между экземпляром структуры и методом протокола
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍1
Управление памятью и производительность типов значений
Нужно ли понимать архитектуру памяти обычным разрабам? Автор нашего любимого блога в статье считает, что прикладным разрабам не нужно знать, как сэкономить пару байтов. А тем более это делать преждевременно.
Но если все же интересно, то можно почитать статью и сравнить
- Куча общая для потоков, а значит память выделяется медленней.
- Когда value type выделяются в куче?
Нужно ли понимать архитектуру памяти обычным разрабам? Автор нашего любимого блога в статье считает, что прикладным разрабам не нужно знать, как сэкономить пару байтов. А тем более это делать преждевременно.
Но если все же интересно, то можно почитать статью и сравнить
- Куча общая для потоков, а значит память выделяется медленней.
- Когда value type выделяются в куче?
🔥7
В прошлую пятницу у меня был выбор: либо уехать в казахстан на пару недель, пока все не закрыли и встретить родственников. Либо поступить на вышку, которая в теории меня забронирует. Я выбрал второе.
Высшее образование не сказал бы, что большая, но колющая тема. Как я уже говорил, вся моя семья — учителя. У всех по несколько дипломов. А я не смог после колледжа совмещать работу и учебу на очке, и ушел вообще с высшего. Причем специальность была из списка на отсрочку. Впервые я пожалел, что отчислился)
Сейчас, скажем так, ценности поменялись🤡 Значимость высшего образования также остается под вопросом, но она выросла психологически и социально. Без него, наверное, работадатель будет сомневаться, ибо ему сложно будет защитить от невнятного призыва. Дополнительные же гарантии помогут лучше планировать с нами работу.
Какое образование я выбрал? Да, которое было. Бизнес-информатик. Если познакомиться с программой обучения на следующие 4 года и 11 месяцев, то может показаться, что это бюджетная российская копия MBA.
Как начну учиться — буду делиться интересными знаниями. Если доживем к диплому, сделаем сравнение.
Можно ли назвать это первым реалити шоу, где мы все будем анализировать ценность высшего 5 лет?
Высшее образование не сказал бы, что большая, но колющая тема. Как я уже говорил, вся моя семья — учителя. У всех по несколько дипломов. А я не смог после колледжа совмещать работу и учебу на очке, и ушел вообще с высшего. Причем специальность была из списка на отсрочку. Впервые я пожалел, что отчислился)
Сейчас, скажем так, ценности поменялись
Какое образование я выбрал? Да, которое было. Бизнес-информатик. Если познакомиться с программой обучения на следующие 4 года и 11 месяцев, то может показаться, что это бюджетная российская копия MBA.
Как начну учиться — буду делиться интересными знаниями. Если доживем к диплому, сделаем сравнение.
Можно ли назвать это первым реалити шоу, где мы все будем анализировать ценность высшего 5 лет?
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳10🔥6👍2🌭1
👍3
Проблемы с синглтонами и почему вместо них следует использовать DI
Эта тема уже задевалась вскольз, когда сравнивали сервис локатор и DI. Тут как раз статья вышла
Проблема синглтонов:
1. Риск гонки из-за доступа с разных классов
2. Ненастраиваемые инициализаторы
3. Сложность с мокированием данных
DI — это паттерн, который помогает инициализировать зависимость почти в начале композиции нашей апки, а потом внедрить.
Чаще всего внедрение происходит через инициализаторы и протоколы. Так мы можем легко контролировать переданные модули
Эта тема уже задевалась вскольз, когда сравнивали сервис локатор и DI. Тут как раз статья вышла
Проблема синглтонов:
1. Риск гонки из-за доступа с разных классов
2. Ненастраиваемые инициализаторы
3. Сложность с мокированием данных
DI — это паттерн, который помогает инициализировать зависимость почти в начале композиции нашей апки, а потом внедрить.
Чаще всего внедрение происходит через инициализаторы и протоколы. Так мы можем легко контролировать переданные модули
👍3
Авито запустило стажировку, если вы помните.
Если учитесь на 3 курсе и старше, либо уже получили диплом по технической, математической или IT-специальности. А возможно, прошли курс переподготовки в IT.
🤑 Стажировка оплачивается
🏠 можно работать на удаленке
⌛️ продолжительность 6 месяцев
Знаю, кому-то будет полезно. Заявки принимают еще 10 дней
Если учитесь на 3 курсе и старше, либо уже получили диплом по технической, математической или IT-специальности. А возможно, прошли курс переподготовки в IT.
Знаю, кому-то будет полезно. Заявки принимают еще 10 дней
Please open Telegram to view this post
VIEW IN TELEGRAM
start.avito.ru
Стажировка для разработчиков в Авито
Начните карьеру в компании, продуктами которой пользуются миллионы. Выбирайте одно из трёх направлений, получайте знания от опытного наставника и поддержку комьюнити, а в конце воспользуйтесь шансом остаться в команде.
👍5😍4❤🔥2🏆1