Отладка представлений SwiftUI: что вызывает изменения?
Представления SwiftUI с большим количеством триггеров перерисовки могут стать проблемой. Отладка представлений SwiftUI является необходимым навыком при написании динамических представлений с несколькими триггерами перерисовки. Такие обертки свойств, как @State и @ObservedObject, перерисуют ваше представление на основе измененного значения.
Часто это ожидаемое поведение, и все выглядит так, как должно быть. Однако в так называемых массивных представлениях SwiftUI (MSV) может существовать множество различных триггеров, вызывающих неожиданную перерисовку представлени
Из этой статьи вы узнаете, почему при написании динамических представлений SwiftUI необходимо предотвращать подобное.
#digest #swiftui
Представления SwiftUI с большим количеством триггеров перерисовки могут стать проблемой. Отладка представлений SwiftUI является необходимым навыком при написании динамических представлений с несколькими триггерами перерисовки. Такие обертки свойств, как @State и @ObservedObject, перерисуют ваше представление на основе измененного значения.
Часто это ожидаемое поведение, и все выглядит так, как должно быть. Однако в так называемых массивных представлениях SwiftUI (MSV) может существовать множество различных триггеров, вызывающих неожиданную перерисовку представлени
Из этой статьи вы узнаете, почему при написании динамических представлений SwiftUI необходимо предотвращать подобное.
#digest #swiftui
🔥6👍2❤1
Как взять идею для пет проекта?
Есть такая проблема - нет идей для своего приложения. Простейший фреймворк для поиска перспективных направлений, без смс, но с регистрацией:
🔴 Регистрируетесь на AppMagic
🔴 Проходитесь по основным категориям приложений, смотрите Top Grossing.
🔴 Выбираете приложения на проверку
🔴 Открываете сайт SensorTower, регистрируетесь
🔴 Смотрите доходы и установки выбранных приложений
На выходе получаете список приложений с работающими In-app покупками, которые хоть что-то зарабатывают, планку отсечения по доходам выбирайте сами.
Автор поста @iosenjoyer
#digest
Есть такая проблема - нет идей для своего приложения. Простейший фреймворк для поиска перспективных направлений, без смс, но с регистрацией:
На выходе получаете список приложений с работающими In-app покупками, которые хоть что-то зарабатывают, планку отсечения по доходам выбирайте сами.
Автор поста @iosenjoyer
#digest
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥5❤2
Вопросы с собеседований: в чем разница Weak и Unowned в Swift
В Swift weak и unowned — это два различных типа ссылок, которые позволяют избежать циклических зависимостей между объектами и предотвратить утечки памяти.
Weak (Слабая ссылка):
🔴 weak используется, когда ссылка на объект не должна увеличивать счетчик ссылок объекта.
🔴 Если объект, на который указывает weak ссылка, был освобожден, weak ссылка автоматически становится nil.
🔴 Опциональный тип используется для weak ссылок, так как они могут быть автоматически устанавливаемыми в nil.
Unowned (Неудерживаемая ссылка):
🔴 unowned также не увеличивает счетчик ссылок объекта, но предполагается, что объект, на который указывает unowned ссылка, всегда существует (не может быть nil).
🔴 Если объект, на который указывает unowned ссылка, был освобожден, попытка доступа к этой ссылке приведет к краху приложения.
🔴 Используется, когда можно гарантировать, что объект, на который указывает ссылка, будет существовать до тех пор, пока существует unowned ссылка.
Выбор между weak и unowned зависит от сценария использования. Если объект, на который указывает ссылка, может быть освобожден и ссылка может стать nil, то используйте weak. Если вы уверены, что объект всегда будет существовать, используйте unowned. Ошибочное использование unowned в случае, когда объект может быть освобожден, приведет к краху приложения из-за доступа к освобожденной памяти.
#digest
В Swift weak и unowned — это два различных типа ссылок, которые позволяют избежать циклических зависимостей между объектами и предотвратить утечки памяти.
Weak (Слабая ссылка):
Unowned (Неудерживаемая ссылка):
Выбор между weak и unowned зависит от сценария использования. Если объект, на который указывает ссылка, может быть освобожден и ссылка может стать nil, то используйте weak. Если вы уверены, что объект всегда будет существовать, используйте unowned. Ошибочное использование unowned в случае, когда объект может быть освобожден, приведет к краху приложения из-за доступа к освобожденной памяти.
#digest
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤5🤔2🔥1👌1
Статистика JetBrains по Swift и Objective-C
Например статистика по UI фреймворкам и менеджерам зависимостей. По ссылке больше;)
Эти вопросы были заданы только разработчикам, которые выбрали Swift или Objective-C в качестве одного из трех своих основных языков программирования.
*Примечательно, если переводить статью с английского через Яндекс, название технологии Swift Package Manager он сохраняет. А переводчик по-умолчанию на сайте JetBrains от Google по-умолчанию переводит что может, у него получается "Менеджер зависимостей Swift".
#digest
Например статистика по UI фреймворкам и менеджерам зависимостей. По ссылке больше;)
Эти вопросы были заданы только разработчикам, которые выбрали Swift или Objective-C в качестве одного из трех своих основных языков программирования.
*Примечательно, если переводить статью с английского через Яндекс, название технологии Swift Package Manager он сохраняет. А переводчик по-умолчанию на сайте JetBrains от Google по-умолчанию переводит что может, у него получается "Менеджер зависимостей Swift".
#digest
👍10❤7🔥2
Всем привет! Давно не виделись :)
Мы не сидели сложа руки, а готовили для вас новую рубрику - "Как мы стали джунами"
Наши гости Азат и Данила из Сбера расскажут про свой первый опыт трудоустройства и сложности, с которыми пришлось столкнуться. Приятного просмотра!
Ребят, нас очень мотивирует ваша обратная связь!
С вас лайки и комментарии, а с нас всё более качественный и полезный контент :)
Увидимся!
00:44 Гости
01:34 Почему iOS/Android?
03:58 Как учились?
07:42 Обучающие материалы бесполезны на реальных проектах?
13:52 В какой момент поняли, что пора искать работу?
16:00 Про поиск работы
18:44 Про вранье в резюме
24:56 Ожидания/реальность
26:33 Про менторов
29:00 Про синдром самозванца
34:28 Советы самому себе в прошлом
35:52 Мифы про покраску кнопок
37:43 Про индивидуальный план развития
42:43 Про сожаления о прошлом
43:49 Советы от ребят по поиску работы
47:10 Про самые важные навыки
#digest
Мы не сидели сложа руки, а готовили для вас новую рубрику - "Как мы стали джунами"
Наши гости Азат и Данила из Сбера расскажут про свой первый опыт трудоустройства и сложности, с которыми пришлось столкнуться. Приятного просмотра!
Ребят, нас очень мотивирует ваша обратная связь!
С вас лайки и комментарии, а с нас всё более качественный и полезный контент :)
Увидимся!
00:44 Гости
01:34 Почему iOS/Android?
03:58 Как учились?
07:42 Обучающие материалы бесполезны на реальных проектах?
13:52 В какой момент поняли, что пора искать работу?
16:00 Про поиск работы
18:44 Про вранье в резюме
24:56 Ожидания/реальность
26:33 Про менторов
29:00 Про синдром самозванца
34:28 Советы самому себе в прошлом
35:52 Мифы про покраску кнопок
37:43 Про индивидуальный план развития
42:43 Про сожаления о прошлом
43:49 Советы от ребят по поиску работы
47:10 Про самые важные навыки
#digest
👍21❤4🔥4❤🔥3🥰2🍌2👎1
Мок-собеседование iOS разработчика
Что такое Mock Interview? Mock Interview - это практическое тренировочное собеседование, которое отлично подготовит вас к реальному собеседованию на работу. Его основная цель - смоделировать приближенную к реальности ситуацию job interview и отработать возможные ответы на трудные вопросы.
Привет! В сегодняшнем выпуске у нас в гостях Миша и Вова, вы уже знакомы. Миша проведет собес, а Вова попытается защитить свой пояс UFC, ой, свое звание сеньора. Будет жарко! Будет много лайфкодинга! Приятного просмотра!
Не скупитесь на обратную связь! Это важно. Вместе мы сделаем мир ИТ чуть более доступным для всех 😊
#digest #собеседование
Что такое Mock Interview? Mock Interview - это практическое тренировочное собеседование, которое отлично подготовит вас к реальному собеседованию на работу. Его основная цель - смоделировать приближенную к реальности ситуацию job interview и отработать возможные ответы на трудные вопросы.
Привет! В сегодняшнем выпуске у нас в гостях Миша и Вова, вы уже знакомы. Миша проведет собес, а Вова попытается защитить свой пояс UFC, ой, свое звание сеньора. Будет жарко! Будет много лайфкодинга! Приятного просмотра!
Не скупитесь на обратную связь! Это важно. Вместе мы сделаем мир ИТ чуть более доступным для всех 😊
#digest #собеседование
🔥20👍7❤2🤡1🤣1
Как использовать дженерики в Swift
Дженерики — это один из подходов, который обеспечивает множество преимуществ, таких как более высокая производительность, меньшее количество кода, повторно используемый код и т.д.
Одна из наших основных обязанностей как разработчиков — максимально упрощать код и избегать повторений. Дженерики — это один из подходов, который обеспечивает множество преимуществ, таких как более высокая производительность, меньшее количество кода, повторно используемый код и т.д. Поэтому я считаю важным, чтобы каждый разработчик знал о них.
Статья в которой разбирается принцип работы дженериков с примерами кода, а так же видеоматериал.
#digest
Дженерики — это один из подходов, который обеспечивает множество преимуществ, таких как более высокая производительность, меньшее количество кода, повторно используемый код и т.д.
Одна из наших основных обязанностей как разработчиков — максимально упрощать код и избегать повторений. Дженерики — это один из подходов, который обеспечивает множество преимуществ, таких как более высокая производительность, меньшее количество кода, повторно используемый код и т.д. Поэтому я считаю важным, чтобы каждый разработчик знал о них.
Статья в которой разбирается принцип работы дженериков с примерами кода, а так же видеоматериал.
#digest
👍8❤3🔥3👎1
Разговоры про Apple
Друзья, всем привет!
Сегодня у нас лайтовый эфир на поговорить.
А побеседуем мы о новинках, похоливарим насчет ИИ и порассуждаем о высоком. Приятного просмотра!
#digest
Друзья, всем привет!
Сегодня у нас лайтовый эфир на поговорить.
А побеседуем мы о новинках, похоливарим насчет ИИ и порассуждаем о высоком. Приятного просмотра!
#digest
👍9🔥2
Мастерство работы в SwiftUI
Инсайдерские советы и приемы для оптимизации производительности приложений.
SwiftUI постепенно набирает силу и становится предпочтительным выбором для создания приложений. В этом посте мы рассмотрим важные моменты, которые помогут вам повысить производительность и эффективность разработки приложений.
Содержание статьи
- Redux или MVVM?
- Используйте @StateObject и @ObservableObject
- Создавайте @Published переменные с осторожностью
- Разбивайте содержимое body на более мелкие части для минимизации времени компиляции
- Предпочтите @State для анимации вместо @Published
- Объявляйте объекты Observable в определенном месте, чтобы избежать ненужного обновления UI
- Найдите, какое изменение данных вызывает обновление представления SwiftUI
- Используйте LazyHStack и LazyVStack, если у вас длинный список
- Есть ли что-нибудь похожее на viewDidLoad()?
- Используйте UIKit компоненты непосредственно в SwiftUI
- Модификатор с условиями
- Избегайте совместного использования .padding и .frame
- Используйте GeometryReader с умом
- Эпизодическое использование AnyView
- Обязательное используйте ID в Foreach и List
- Предпочитайте использовать текст, а не метку
- Используйте Group для возврата нескольких экземпляров представления
- Используйте .fixedSize(), чтобы указать, что фрейм не изменяется
- Напутственные слова
#digest
Инсайдерские советы и приемы для оптимизации производительности приложений.
SwiftUI постепенно набирает силу и становится предпочтительным выбором для создания приложений. В этом посте мы рассмотрим важные моменты, которые помогут вам повысить производительность и эффективность разработки приложений.
Содержание статьи
- Redux или MVVM?
- Используйте @StateObject и @ObservableObject
- Создавайте @Published переменные с осторожностью
- Разбивайте содержимое body на более мелкие части для минимизации времени компиляции
- Предпочтите @State для анимации вместо @Published
- Объявляйте объекты Observable в определенном месте, чтобы избежать ненужного обновления UI
- Найдите, какое изменение данных вызывает обновление представления SwiftUI
- Используйте LazyHStack и LazyVStack, если у вас длинный список
- Есть ли что-нибудь похожее на viewDidLoad()?
- Используйте UIKit компоненты непосредственно в SwiftUI
- Модификатор с условиями
- Избегайте совместного использования .padding и .frame
- Используйте GeometryReader с умом
- Эпизодическое использование AnyView
- Обязательное используйте ID в Foreach и List
- Предпочитайте использовать текст, а не метку
- Используйте Group для возврата нескольких экземпляров представления
- Используйте .fixedSize(), чтобы указать, что фрейм не изменяется
- Напутственные слова
#digest
👍12🔥4❤2
😱 AnyView — зло SwiftUI
Автор статьи провел несколько тестов, чтобы сравнить скорость отрисовки и использование памяти при использовании AnyView и других альтернативных подходов.
Он пришел к выводу, что AnyView может существенно замедлять работу SwiftUI, особенно при большом количестве элементов в иерархии представлений. Также дал несколько советов, как избежать AnyView и использовать более эффективные способы работы с разными типами представлений.
#digest
Автор статьи провел несколько тестов, чтобы сравнить скорость отрисовки и использование памяти при использовании AnyView и других альтернативных подходов.
Он пришел к выводу, что AnyView может существенно замедлять работу SwiftUI, особенно при большом количестве элементов в иерархии представлений. Также дал несколько советов, как избежать AnyView и использовать более эффективные способы работы с разными типами представлений.
#digest
👍7
SwiftUI Interview Questions.pdf
27.8 KB
Вопросы по SUI
Если вы готовитесь к собеседованию на SwiftUI проект или просто работаете с SwiftUI, но хотите расширить свои знания, вот список хороших вопросов, которые помогут вам подготовиться
#digest #собеседование
Автор: @eleev
Если вы готовитесь к собеседованию на SwiftUI проект или просто работаете с SwiftUI, но хотите расширить свои знания, вот список хороших вопросов, которые помогут вам подготовиться
#digest #собеседование
Автор: @eleev
👍24🔥6❤2😁1
Как снять логи при краше мобильного приложения?
При тестировании приложений в большинстве случаев, мы сталкиваемся со сбоем приложения. И в таких ситуациях очень важно уметь собирать логи с устройства, чтобы максимально быстро пофиксить ошибки.
Подробная статья как снимать логи крешей приложений разными способами в iOS/Android.
Как получить логи с iOS?
- Непосредственно на самом девайсе.
- Через Xcode.
#digest
При тестировании приложений в большинстве случаев, мы сталкиваемся со сбоем приложения. И в таких ситуациях очень важно уметь собирать логи с устройства, чтобы максимально быстро пофиксить ошибки.
Подробная статья как снимать логи крешей приложений разными способами в iOS/Android.
Как получить логи с iOS?
- Непосредственно на самом девайсе.
- Через Xcode.
#digest
👍6❤1
Как массив хранит ссылки? Сильно или слабо?
Правильный ответ — сильно.
А как сделать слабо? Использовать NSPointerArray
#digest
Правильный ответ — сильно.
А как сделать слабо? Использовать NSPointerArray
#digest
👍21
This media is not supported in your browser
VIEW IN TELEGRAM
Конфигурация поведения отскока ScrollView в SwiftUI
Конфигурация поведения отскока ScrollView позволяет определить, отскакивает ли прокручиваемое представление при достижении конца его содержимого. Независимо от того, идет ли речь о горизонтальной или вертикальной прокрутке списка, вы можете настроить оба направления с помощью модификаторов вида в SwiftUI.
В данной статье приводятся различные примеры кода и подробно рассказывается как достичь такого состояния.
#digest
Конфигурация поведения отскока ScrollView позволяет определить, отскакивает ли прокручиваемое представление при достижении конца его содержимого. Независимо от того, идет ли речь о горизонтальной или вертикальной прокрутке списка, вы можете настроить оба направления с помощью модификаторов вида в SwiftUI.
В данной статье приводятся различные примеры кода и подробно рассказывается как достичь такого состояния.
#digest
👍8
Как через Push-уведомления на iPhone утекают данные пользователей
Исследователь безопасности Томми Мыск (Tommy Mysk) продемонстрировал, как push-уведомления на iPhone могут использоваться популярными приложениями для скрытой отправки данных о пользователе.
В новом ролике, рассказывающем об этой практике, Мыск рассказал о том, как некоторые приложения для iOS используют функцию, представленную в iOS 10, которая позволяет приложениям настраивать push-уведомления. Эта функция, изначально предназначенная для того, чтобы приложения могли обогащать уведомления дополнительным контентом или расшифровывать зашифрованные сообщения, похоже, была использована некоторыми разработчиками для других действий. Согласно выводам Мыска, различные популярные приложения, включая TikTok, Facebook, Twitter, LinkedIn и Bing, используют короткое время фонового исполнения, предоставленное для такой настройки уведомлений, для отправки аналитической информации.
#digest
Исследователь безопасности Томми Мыск (Tommy Mysk) продемонстрировал, как push-уведомления на iPhone могут использоваться популярными приложениями для скрытой отправки данных о пользователе.
В новом ролике, рассказывающем об этой практике, Мыск рассказал о том, как некоторые приложения для iOS используют функцию, представленную в iOS 10, которая позволяет приложениям настраивать push-уведомления. Эта функция, изначально предназначенная для того, чтобы приложения могли обогащать уведомления дополнительным контентом или расшифровывать зашифрованные сообщения, похоже, была использована некоторыми разработчиками для других действий. Согласно выводам Мыска, различные популярные приложения, включая TikTok, Facebook, Twitter, LinkedIn и Bing, используют короткое время фонового исполнения, предоставленное для такой настройки уведомлений, для отправки аналитической информации.
#digest
👍5🔥3😱2😁1
Continuations для взаимодействия асинхронных задач с синхронным кодом
В Swift были представлены новые функции, которые помогают нам адаптировать старые API в стиле completionhandler к современному асинхронному коду.
Continuations позволяют нам создать обертку над обработчиком завершения (completion handler) и асинхронными функциями, чтобы мы могли обернуть старый код в более современный API. Например, функция withCheckedContinuation() создает новое continuation, которое может запускать любой код, который мы хотим, а затем вызывает resume(returning:), чтобы отправить значение обратно, даже если это часть обработчика завершения (completion handler).
Предлагаю вместе посмотреть на реализацию в данной статье.
#digest
В Swift были представлены новые функции, которые помогают нам адаптировать старые API в стиле completionhandler к современному асинхронному коду.
Continuations позволяют нам создать обертку над обработчиком завершения (completion handler) и асинхронными функциями, чтобы мы могли обернуть старый код в более современный API. Например, функция withCheckedContinuation() создает новое continuation, которое может запускать любой код, который мы хотим, а затем вызывает resume(returning:), чтобы отправить значение обратно, даже если это часть обработчика завершения (completion handler).
Предлагаю вместе посмотреть на реализацию в данной статье.
#digest
👍8🔥5❤1
Что такое состояние гонки (race condition)
Состояние гонки (race condition) — это ситуация, которая возникает в многозадачных или многопоточных программных системах, когда результаты выполнения программы зависят от того, в какой последовательности выполняются инструкции или операции в различных потоках или процессах. Это может привести к непредсказуемому поведению программы или к ошибкам в её выполнении.
Состояние гонки возникает, когда несколько потоков или процессов одновременно пытаются получить доступ к одним и тем же ресурсам (например, переменным памяти, файлам или устройствам ввода-вывода) без синхронизации. При этом результаты операций могут зависеть от порядка их выполнения, что делает поведение программы неопределённым.
Примером состояния гонки может быть ситуация, когда два потока пытаются изменить одну и ту же переменную. Если эти изменения не синхронизированы правильно, результаты могут быть непредсказуемыми, в зависимости от того, какой поток завершит операцию первым.
Для предотвращения состояний гонки часто используются механизмы синхронизации, такие как мьютексы, семафоры, блокировки и атомарные операции, которые гарантируют правильное взаимодействие между потоками или процессами при доступе к общим ресурсам.
#digest
Состояние гонки (race condition) — это ситуация, которая возникает в многозадачных или многопоточных программных системах, когда результаты выполнения программы зависят от того, в какой последовательности выполняются инструкции или операции в различных потоках или процессах. Это может привести к непредсказуемому поведению программы или к ошибкам в её выполнении.
Состояние гонки возникает, когда несколько потоков или процессов одновременно пытаются получить доступ к одним и тем же ресурсам (например, переменным памяти, файлам или устройствам ввода-вывода) без синхронизации. При этом результаты операций могут зависеть от порядка их выполнения, что делает поведение программы неопределённым.
Примером состояния гонки может быть ситуация, когда два потока пытаются изменить одну и ту же переменную. Если эти изменения не синхронизированы правильно, результаты могут быть непредсказуемыми, в зависимости от того, какой поток завершит операцию первым.
Для предотвращения состояний гонки часто используются механизмы синхронизации, такие как мьютексы, семафоры, блокировки и атомарные операции, которые гарантируют правильное взаимодействие между потоками или процессами при доступе к общим ресурсам.
#digest
👍8🔥4❤3
Как я упал в зарплате, во благо своего развития
Всем привет, в этой статье я бы хотел поделиться с вами, как я попал в разработку, какая зарплата у меня была в начале моего пути и как я повысил её себе в несколько раз, а потом снова понизил.
#digest
Всем привет, в этой статье я бы хотел поделиться с вами, как я попал в разработку, какая зарплата у меня была в начале моего пути и как я повысил её себе в несколько раз, а потом снова понизил.
#digest
🤡63👍10🔥7❤3🤣2🐳1🍾1🙉1
5 полезных навыков для iOS разработчика
Мир iOS разработки стремительно развивается, и для успешной карьеры необходимо не только знать Swift, но и обладать определенным набором навыков, которые помогут вам выделяться из толпы и быть заметным программистом. В данной статье, я хочу рассказать свое видение и что я считаю полезным.
#digest
Мир iOS разработки стремительно развивается, и для успешной карьеры необходимо не только знать Swift, но и обладать определенным набором навыков, которые помогут вам выделяться из толпы и быть заметным программистом. В данной статье, я хочу рассказать свое видение и что я считаю полезным.
#digest
👍15🤡7🔥5❤4
Топ 10 тупых вопросов на собесе
Всем привет! Знаете, собеседования на iOS разработчика - это не всегда про глубокие знания swift, архитектурных паттернов, библиотек, system design. Иногда они напоминают сюрреалистический фильм с элементами абсурда. И сегодня я хочу поделиться с вами ТОП-10 самых нелепых вопросов, которые задавали мне на собеседованиях за всю историю. Данная статья - это лишь мое мнение, соглашаться Вам или нет, дело ваше.
#digest
Всем привет! Знаете, собеседования на iOS разработчика - это не всегда про глубокие знания swift, архитектурных паттернов, библиотек, system design. Иногда они напоминают сюрреалистический фильм с элементами абсурда. И сегодня я хочу поделиться с вами ТОП-10 самых нелепых вопросов, которые задавали мне на собеседованиях за всю историю. Данная статья - это лишь мое мнение, соглашаться Вам или нет, дело ваше.
#digest
👍14🤡8❤4🔥4