SDWebImage: bu nima, asosiy tushunchalar va UIImageView

Muallif: IT Sectr Nashr etilgan: 2026-05-05 O'qish vaqti: 8 daq

SDWebImage iOS va macOS-da rasmlarni asinxron yuklash uchun kutubxona bo‘lib, tarmoq, kesh va animatsiyalar bilan ishlash uchun yagona API ni taqdim etadi. rasmiy repozitoriy ma’lumotlariga ko‘ra, kutubxona 100 000 dan ortiq loyihalarda qo‘llaniladi va GIF, WebP, SVG hamda progressiv yuklashni qo‘llab-quvvatlaydi. SDWebImage diskda va xotirada avtomatik keshlash, shuningdek UIKit va SwiftUI bilan integratsiyani ta’minlaydi.

Asosiy ma’lumotlar

  • SDWebImage — keshlash, animatsiya va transformatsiyalarni qo‘llab-quvvatlagan holda iOS-da rasmlarni asinxron yuklash uchun kutubxona.
  • SDWebImageManager — rasmlarni yuklash, dekodlash va keshlashni muvofiqlashtiruvchi markaziy sinf.
  • Disk Cache rasmlarni diskda saqlaydi, qayta tashrifda tarmoqsiz yuklashni ta’minlaydi.
  • WebP va GIF SDImageWebPCoder va SDImageGIFCoder plaginlari orqali qo‘llab-quvvatlanadi.
  • SwiftUI — kutubxona deklarativ rasm yuklash uchun WebImage View komponentini taqdim etadi.

SDWebImage nima?

SDWebImage — Apple platformalarida (iOS, macOS, tvOS, watchOS) rasmlarni asinxron yuklash uchun kutubxona. UIImageView uchun sd_setImage metodi bilan kategoriyani taqdim etadi, bir qatorda istalgan manbadan rasmni yuklaydi, keshlaydi va ko‘rsatadi.

Kutubxona progressiv yuklashni (baytlar kelishi bilan rasm ko‘rsatiladi), animatsion rasmlarni (GIF, APNG), transformatsiyalarni (yumaloqlash, kesish, suv belgisi qo‘shish) va maxsus dekoderlarni qo‘llab-quvvatlaydi. GitHub Stats ma’lumotlariga ko‘ra, SDWebImage 25 mingdan ortiq yulduzga ega va Twitter, Pinterest hamda Instagram kabi yirik ilovalarda qo‘llaniladi.

Arxitektura komponentlar zanjiriga asoslangan: Coder (dekodlash), Cache (saqlash), Loader (tarmoq) va Transformer (qayta ishlash). Har bir komponent almashtirilishi mumkin, bu kutubxonani loyihaning o‘ziga xos talablariga moslashtirish imkonini beradi.

SDWebImage qanday ishlaydi: menejer va kesh

SDWebImageManager — yuklash jarayonini muvofiqlashtiruvchi markaziy komponent. URL ni qabul qiladi, keshlarni tekshiradi, ma’lumotlarni yuklaydi, ularni UIImage ga dekodlaydi va ImageView yoki Completion Handler ga uzatadi. Menejer shared singleton orqali ishlaydi, ilovaning istalgan nuqtasidan foydalanish mumkin.

Yuklash jarayoni

Menejer ketma-ket Memory Cache (UIImage bilan NSDictionary), so‘ngra Disk Cache (fayl tizimi) ni tekshiradi. Ma’lumot bo‘lmaganda NSURLSession orqali tarmoq so‘rovi bajariladi. Yuklashdan so‘ng ma’lumotlar dekodlanadi, transformatsiyalardan o‘tadi va ikkala keshlarda saqlanadi. Butun jarayon fon navbatida bajariladi, natija main queue da yetkaziladi.

  • Memory Cache — O(1) tekshirish, xotira limitini hisobga olgan holda UIImage saqlash
  • Disk Cache — fayl tizimidan o‘qish, siqilgan ma’lumotlarni saqlash
  • NSURLSession — HTTP/2 qo‘llab-quvvatlashi va sozlanishi mumkin bo‘gan vaqt limiti bilan yuklash

UIImageView kategoriyasi

UIImageView+WebCache — sd_setImage metodini qo‘shuvchi Objective-C kategoriyasi (Swift dan foydalanish mumkin). Bu metod URL, placeholder, opsiyalar (SDWebImageOptions) va completion-blokni qabul qiladi. Kategoriya sd_cancelCurrentImageLoad mexanizmi orqali jadval katakchasini qayta ishlatishda avvalgi so‘rovni avtomatik bekor qiladi.

SDWebImage ning asosiy sinflari

SDWebImage arxitekturasi aniq mas’uliyat zonalari bilan bir necha modullarga bo‘lingan. Har bir sinf yuklashdan ko‘rsatishgacha bo‘lgan bitta vazifani hal qiladi.

SDWebImageManager

SDWebImageManager — rasmlar bilan barcha operatsiyalar uchun fasad. ImageCache (SDImageCache) va ImageLoader (SDWebImageDownloader) ga havolalarni o‘z ichiga oladi. SDWebImageManagerDelegate delegati orqali yuklashni tutib, URL yoki xatti-harakatni o‘zgartirish mumkin.

SDImageCache

SDImageCache — noyob namespace bilan ishga tushiriladigan ikki darajali kesh (memory + disk). Memory Cache sozlanishi mumkin bo‘lgan limit bilan UIImage ni saqlaydi (standart — system memory warning gacha). Disk Cache ma’lumotlarni Library/Caches katalogida sozlanishi mumkin bo‘lgan saqlash muddati bilan saqlaydi (standart 7 kun).

SDWebImageDownloader

SDWebImageDownloader — sarlavhalar, vaqt limitlari va qayta urinishlarni qo‘llab-quvvatlovchi NSURLSession asosidagi HTTP mijozi. Yuklovchi bir xil so‘rovlarni bitta tarmoq chaqiruvida birlashtiradi (deduplikatsiya) va natijani barcha obunachilar o‘rtasida taqsimlaydi.

SDWebImage kesh arxitekturasi

SDWebImage deterministik tekshirish tartibi bilan ikki darajali keshlashni amalga oshiradi: avval xotira, so‘ngra disk. Kesh kaliti so‘rov parametrlarisiz rasmning mutlaq URL i yoki uning MD5 heshidir.

DarajaSaqlash turiMazmunLimit
Memory CacheNSCache (NSDictionary)UIImage (dekodlangan Bitmap)Memory warning gacha
Disk CacheFayl tizimiNSData (JPEG/PNG/WebP)7 kun TTL (sozlanishi mumkin)
Auto Purge CacheMemory + DiskFramework ning birlashtirilgan keshiSozlanishi mumkin bo‘lgan fayl hajmi

Memory warning olinganda iOS SDImageCache ni UIApplicationDidReceiveMemoryWarningNotification orqali xabardor qiladi, shundan so‘ng Memory Cache to‘liq tozalanadi. Disk Cache TTL yoki limit oshib ketganda tozalanadi, fayllar oxirgi kirish sanasiga ko‘ra tartiblanadi.

Keshni qo‘lda boshqarish uchun metodlar: clearMemory, clearDisk, calculateSize. Keshlashni muayyan so‘rovlar uchun SDWebImageCacheMemoryOnly yoki SDWebImageAvoidAutoSetImage opsiyalari orqali o‘chirish mumkin.

Swift da SDWebImage dan foydalanish misollari

SDWebImage rasmlarni yuklash uchun bir necha interfeyslarni taqdim etadi: oddiy UIImageView kategoriyasidan tortib maxsus qayta ishlash bilan rivojlangan menejergacha.

UIImageView da asosiy yuklash

sd_setImage — UIImageView da rasm yuklash uchun asosiy metod. URL, placeholder va Options hamda Context orqali ixtiyoriy parametrlarni qabul qiladi. Barcha Completion Handler lar asosiy thread da bajariladi.

swift
let imageView = UIImageView()
imageView.sd_setImage(
    with: URL(string: "https://example.com/photo.jpg"),
    placeholderImage: UIImage(named: "placeholder"),
    options: [.progressiveLoad, .retryFailed],
    context: [.imageThumbnailPixelSize : CGSize(width: 300, height: 300)]
)

Metod SDWebImageToken (operatsiya) ni qaytaradi, kerak bo‘lganda bekor qilinishi mumkin. Ichki tarzda sd_setImage SDWebImageManager.load ni chaqiradi, rasmni avtomatik o‘rnatish uchun ImageView ni Target sifatida uzatadi.

Maxsus transformatsiya bilan yuklash

SDWebImage Transformer — yagona transformedImage metodiga ega protokolni qo‘llab-quvvatlaydi. O‘rnatilgan transformatsiyalar: doira, yumaloqlash, rang filtri, hajm o‘zgartirish. Transformatsiyalarni birlashtirish && operatori orqali amalga oshiriladi.

swift
let transformer = SDImageResizingTransformer(
    size: CGSize(width: 200, height: 200),
    scaleMode: .aspectFill
)
let roundedTransformer = SDImageRoundCornerTransformer(
    radius: 16,
    corners: .allCorners,
    borderWidth: 0
)
imageView.sd_setImage(
    with: url,
    placeholderImage: placeholder,
    context: [.imageTransformer : transformer && roundedTransformer]
)

SwiftUI bilan foydalanish

Kutubxona WebImage — placeholder, taraqqiyot ko‘rsatkichi va xatolarni boshqarishni qo‘llab-quvvatlovchi SwiftUI uchun View komponentini taqdim etadi. Komponent avtomatik ravishda View ning hayot sikliga obuna bo‘ladi va yo‘qolganda yuklashni bekor qiladi.

swift
struct CachedImageView: View {
    let url: URL

    var body: some View {
        WebImage(url: url) { phase in
            if let image = phase.image {
                image.resizable()
            } else if phase.error {
                Color.red
            } else {
                ProgressView()
            }
        }
    }
}

SDWebImage da Image Transformations

SDWebImage SDImageTransformer protokoli orqali moslashuvchan rasm transformatsiyasi tizimini taqdim etadi. Transformatsiyalar dekodlashdan so‘ng, lekin keshlashdan oldin qo‘llaniladi — transformatsiya natijasi diskda yangi kalit ostida saqlanadi, keyingi so‘rovlarda qayta qo‘llanishni oldini oladi.

O‘rnatilgan transformatsiyalar: SDImageResizingTransformer (rejim bilan hajm o‘zgartirish), SDImageRoundCornerTransformer (ixtiyoriy chegara bilan burchaklarni yumaloqlash), SDImageFlipTransformer (oyna aksi) va SDImageFilterTransformer (CoreImage filtrlari). && operatori bilan birlashtirish qayta ishlash zanjirini yaratadi.

Maxsus transformatsiyalar uchun transformedImageWithImage:forKey: metodi bilan SDImageTransformer protokolini amalga oshirish kifoya. Transformatsiya kaliti avtomatik ravishda kesh kalitiga qo‘shiladi, bir xil rasmning turli versiyalari o‘rtasida to‘qnashuvlarning oldini oladi.

SDWebImage ni Kingfisher bilan solishtirish

iOS platformasida SDWebImage ning asosiy raqobatchilari Kingfisher (sof Swift) va Nuke dir. SDWebImage va Kingfisher o‘rtasidagi tanlov ko‘pincha loyihaning tili va talab qilinadigan funksionallikka bog‘liq.

XususiyatSDWebImageKingfisher
TilObjective-C + Swift APISwift (100%)
SwiftUIWebImage ViewKFImage View
GIFHa (o‘rnatilgan)Ha (o‘rnatilgan)
WebPHa (plagin)Ha (o‘rnatilgan)
Progressiv yuklashHa (plagin bilan)Ha
Framework hajmi~1.2 MB~900 KB
KeshMemory + DiskMemory + Disk
CocoaPods qo‘llab-quvvatlashiHaHa

SDWebImage Objective-C loyihalari yoki gibrid loyihalar uchun afzal tanlov bo‘lib qolmoqda. Kingfisher tip xavfsizligi va mahalliy Swift sintaksisi tufayli sof Swift loyihalari uchun ko‘proq mos keladi. Ikkala kutubxona ham o‘xshash kesh arxitekturasi va tezlikka ega.

iOS loyihasida SDWebImage sozlamalari

SDWebImage ni ulash Swift Package Manager, CocoaPods yoki Carthage orqali amalga oshiriladi. Kutubxona modullarga bo‘lingan: asosiy (SDWebImage), Coder (qo‘shimcha formatlar) va MapKit (MKAnnotationView uchun).

swift
// Swift Package Manager (Package.swift)
dependencies: [
    .package(
        url: "https://github.com/SDWebImage/SDWebImage.git",
        from: "5.19.0"
    )
]

// CocoaPods (Podfile)
pod 'SDWebImage', '~> 5.19.0'
// WebP va SVG uchun plaginlar:
pod 'SDWebImageWebPCoder'
pod 'SDWebImageSVGCoder'

O‘rnatishdan so‘ng kutubxona qo‘shimcha sozlamalarsiz foydalanishga tayyor. Keshni sozlash uchun noyob namespace bilan SDImageCache namunasi yaratiladi, u ishga tushirishda SDWebImageManager ga uzatiladi. Global konfiguratsiya SDWebImageManager.shared orqali amalga oshiriladi.

swift
// Keshni sozlash
let config = SDImageCacheConfig()
config.maxDiskAge = 14 * 86400 // 7 o‘rniga 14 kun
config.maxDiskSize = 500 * 1024 * 1024 // 500 MB
config.shouldCacheImagesInMemory = .true

let cache = SDImageCache(
    namespace: "custom",
    diskCacheDirectory: FileManager.default.urls(
        for: .cachesDirectory,
        in: .userDomainMask
    ).first?.appendingPathComponent("custom_cache"),
    config: config
)
SDWebImageManager.sharedImageCache = cache

Ko‘p beriladigan savollar

SDWebImage nima va qanday vazifalarni hal qiladi?

SDWebImage — iOS va macOS da rasmlarni asinxron yuklash uchun kutubxona. Tarmoqdan rasmlarni keshlash, dekodlash, transformatsiya qilish va ko‘rsatish vazifalarini hal qiladi, dasturchini thread va xotirani qo‘lda boshqarishdan ozod qiladi.

SDWebImage ni UITableView bilan qanday ishlatish kerak?

cellForRowAt metodida sd_setImage ni URL va placeholder bilan ishlating. Kutubxona katakchani qayta ishlatishda avvalgi so‘rovni avtomatik bekor qiladi. Silliq siljitish uchun .progressiveLoad opsiyasini belgilang va thumbnail hajmini kontekst orqali sozlang.

SDWebImage Kingfisher dan nima bilan farq qiladi?

SDWebImage Objective-C da Swift qobig‘i bilan yozilgan, Kingfisher esa sof Swift da. SDWebImage kengroq plagin ekotizimiga ega (WebP, SVG, MapKit). Kingfisher yaxshiroq tip xavfsizligi va Swift Concurrency bilan integratsiyani ta’minlaydi.

SDWebImage da WebP qo‘llab-quvvatlashni qanday qo‘shish mumkin?

SDWebImageWebPCoder plaginini CocoaPods yoki SPM orqali o‘rnating. Koder SDImageWebPCoder.shared ni AppDelegate da chaqirish orqali ro‘yxatdan o‘tkazing. Ro‘yxatdan o‘tkazilgandan so‘ng kutubxona formatni avtomatik aniqlaydi va WebP ni dekodlaydi.

SDWebImage keshlarini dasturiy ravishda qanday tozalash mumkin?

Xotira uchun SDImageCache.shared.clearMemory() va disk uchun SDImageCache.shared.clearDisk() ni chaqiring. Faqat eskirgan fayllarni tozalash uchun TTL tekshiruvi bilan clearDisk(completion:) dan foydalaning. calculateSizeWithCompletionBlock metodi joriy kesh hajmini qaytaradi.

Xulosa

  • SDWebImage — GitHub da 25 mingdan ortiq yulduz bilan iOS da rasm yuklashning de-fakto standarti.
  • Ikki darajali kesh (Memory + Disk) takroriy rasmlarni bir zumda yuklash va oflayn kirishni ta’minlaydi.
  • Progressiv yuklash va GIF, WebP, SVG qo‘llab-quvvatlashi kutubxonani istalgan formatlar uchun universal yechimga aylantiradi.
  • SDWebImageManager har bir komponentni sozlash imkoniyati bilan yagona yuklash fasadini taqdim etadi.
  • WebImage SwiftUI uchun barcha holatlarni boshqarish bilan deklarativ uslubda rasm yuklash imkonini beradi.
  • Transformatsiyalar (hajm, yumaloqlash, rang) && operatori bilan birlashtiriladi va keshlashdan oldin bajariladi.
  • Objective-C bilan moslik SDWebImage ni Swift ga o‘tmasdan legacy loyihalar uchun foydalanish imkonini beradi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing