Сейчас объясню многопоточку iOS так, что на всю жизнь запомнится — на туалетах!
Последовательная очередь
Есть одна кабинка, в ней помещается один человек за раз. Все желающие выстраиваются в очередь.
Можно сделать две очереди из двух туалетов для мальчиков и девочек, но внутри все равно только один унитаз.
Конкурентная очередь
В одном туалете несколько кабинок, несколько человек за раз.
Почему это не несколько отдельных последовательных очередей? Потому что две конкурентные очереди нужны для мужского и женского туалета, в каждом по несколько унитазов
Синхронное выполнение на очереди
Ваш друг хочет пописать и вы его ждете. Вам не важно сколько в туалете кабинок и какой процесс внутри, вы пойдете в кино когда ваш друг выйдет, а пока вы его ждете.
Асинхронное выполнение на очереди
Ваш друг идет писать, а вы пока идете билет покупать и стоять в своей очереди на билет
Барьер на конкурентной очереди
Вы приходите пописать, но техничка ждет когда из туалетов все выйдут, чтобы их почистить за раз и никого не смущать. Техничка — барьер. Пока туалеты не почистят она никого не пустит, но и сама дождется пока все выйдут.
Барьер не имеет смыла на последовательной очереди в одну кабинку — техничка просто займет место в очереди и никто не знает почистит она его или по своим делам зайдет.
Диспатч Групп
Это учитель ведет школьников в театре в туалет: считает сколько ушло и сколько вернулась обратно. Пока последний школьник не выйдет вся группа никуда не двинется.
Диспатч эплай
У школьного учителя есть возможность отправить всех сразу в несколько туалетов, при этом ведет учет кто где.
Если все пойдут по-большому, то получится быстрее, но если все лишь пописать сбегали, то на ведении списков уйдет больше времени чем на сами процедуры.
Креш при одновременном доступе
Вы сели в кабинку выполнять операцию на чтение, а кто-то ломится в ней выполнить запись. Если дверь не закрыта, то человек вломится к вам и обоим будет некомфортно, а приложения ваще вылетают от такого.
Чтобы в кабинку никто не вломился нужно дверь на замочек закрывать пока вы внутри и оставлять открытой когда выходите. Это локи.
Производительные и энергоэффективные ядра
Не всегда вам нужно прям занять кабинку, иногда достаточно быстро сикнуть и пойти дальше. Для этого есть энергоэффективные настенные писуары. Чаще этого достаточно.
Кто не согласен может сравнить посмотреть на очередь в женский туалет.
Если у вас производительная задача, то лучше пойти в кабинку и нагрузить ее по полной.
Актор
Высокие материи: туалетам тут ваще не место, поэтому тут будет очередь на стойку регистрации в аэропорте.
Стоек много, но у каждой своя очередь, в ней никто не толкается и все идут друг за другом. В обход очереди нельзя никак, такая очередь это асинхронный контекст.
Дедлок
Я не могу зайти в кабинку, потому что она занята и не могу отодвинуться или развернуться, а из кабинки не могут выйти, потому что выход заблокирован
• • •
Missing some Tweet in this thread? You can try to
force a refresh
С ней Apple позволяет быстро продолжить работу на другом устройстве. Для VoiceOver Designer это полезно: рисуешь прототип на компе, тут же проверяешь как он звучит на телефон.
Было ли легко? Пришлось использовать чуть ли не весь тулинг что был под рукой
Документация: если у вас document-based application, то все заводится с полпинка — в описании файла добавляете флаг NSUbiquitousDocumentUserActivityType с каким-нибудь ключом и готово.
Заработало? Да, подсказки появились. Закончилась ли на этом фича? Нет
С айфона на мак открывается все хорошо, а вот с мака на айфон открывается только тот документ, который был открыт первым.
Пытаюсь продебажить. Начинаю с айфона, он ведь не работает. URL в айфон и правда приходит один и тот же, значит айфон нормально работает
У меня появился повод вспомнить про фичу, которую сделали пару лет назад — интерфейс выбора пиццы из половинок в Додо.
Расскажу как дизайнили, почему и какие решения приняли. От идеи до прода в одном треде.
Продукт показываем крупно, в полную ширину экрана. Можно было бы еще крупнее — вынести за пределы экрана, но нам важна форма пиццы, а не начинка.
Управлять контентом напрямую кайфово, поэтому двигаем пиццы под пальцем. Получается два вертикальных списка. Выбранная пицца крупно, остальные уходят в фон, все интерактивно изменяется. смотрите в движении:
Уже сотню лет никто не решается массово заредизайнить клаву. У Эпла последняя выглядит вот так. Давайте немного подвигаем кнопки и посмотрим как можно сделать лучше.
Наши пальцы двигаются впереди и назад, а не по диагонали, поэтому кнопки выравниваем в колонки.
Длина боковых клавиш нужна была только для компенсации сдвига, укоротим кнопки обратно. Не спешите бомбить за короткий энтер, его еще подвинем поудобней.