Fuente
Затишна Галера | iOSКомпас 🧭1️⃣4️⃣7️⃣ Завдання 147Для чого потрібен prepareThumbnail?До...
595 Vistas/Alcance
2026-03-25 08:02
Mensaje №2530
#iOSКомпас 🧭1️⃣4️⃣7️⃣ Завдання 147Для чого потрібен prepareThumbnail?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel.UIImage.prepareThumbnail(of:completionHandler:) - це той самий маленький UIKit-хелпер, про який легко забути, а потім знову винаходити велосипед через CGImageSource, ресайз і зайві танці з декодуванням. Метод асинхронно готує thumbnail заданого розміру у фоновому потоці й повертає UIImage? у completion handler. І важливий нюанс - сам completion теж викликається не на головному потоці. Тобто будь-яке оновлення UI після цього треба явно перекидати на main thread. 🔣 Практичний сенс простий: коли у вас список карток, галерея, прев’ю файлів або стрічка з картинками, немає жодного сенсу тягнути повнорозмірне зображення в інтерфейс, якщо на екрані все одно потрібна мініатюра. Apple прямо підводить до того, що підготовка thumbnail знижує накладні витрати порівняно з роботою з повним розміром зображення. Для цього в UIImage є і синхронний варіант preparingThumbnail(of:), і асинхронний prepareThumbnail(of:completionHandler:). Другий - куди здоровіший вибір для скролів, списків і будь-якого місця, де не хочеться блокувати потік рендерингу. По суті, це API про одну дуже приземлену річ: не мучити інтерфейс великими картинками там, де вистачить маленької. Менше зайвої роботи, менше шансів спіймати фризи, більш передбачуваний скрол. А ще це хороший приклад старої доброї UIKit-логіки: важку роботу - у фон, UI - окремо й акуратно. 🤓 Можна навіть дати мікроприклад:image.prepareThumbnail(of: CGSize(width: 120, height: 120)) { thumbnail in DispatchQueue.main.async { imageView.image = thumbnail }}
#️⃣ Якщо вам для інтерфейсу потрібна саме мініатюра - готуйте мініатюру, а не тягніть у UI повну JPEG-цеглину й не сподівайтеся, що система все якось сама розрулить.@Zatishna_Galera