SDWebImage: wat het is, kernconcepten en UIImageView

Auteur: IT Sectr Gepubliceerd: 2026-05-05 Leestijd: 8 min

SDWebImage is een bibliotheek voor asynchroon laden van afbeeldingen op iOS en macOS, die een uniforme API biedt voor het werken met netwerk, cache en animaties. Volgens gegevens van de officiële repository wordt de bibliotheek gebruikt in meer dan 100.000 projecten en ondersteunt het GIF, WebP, SVG en progressief laden. SDWebImage zorgt voor automatische caching op schijf en in geheugen, evenals integratie met UIKit en SwiftUI.

Belangrijkste punten

  • SDWebImage — bibliotheek voor asynchroon laden van afbeeldingen op iOS met ondersteuning voor caching, animaties en transformaties.
  • SDWebImageManager — centrale klasse die het laden, decoderen en cachen van afbeeldingen coördineert.
  • Disk Cache slaat afbeeldingen op schijf op en zorgt voor laden zonder netwerk bij herhaald bezoek.
  • WebP en GIF worden ondersteund via de plug-ins SDImageWebPCoder en SDImageGIFCoder.
  • SwiftUI — de bibliotheek biedt de WebImage View-component voor declaratief laden van afbeeldingen.

Wat is SDWebImage?

SDWebImage — bibliotheek voor asynchroon laden van afbeeldingen op Apple-platforms (iOS, macOS, tvOS, watchOS). Het biedt een categorie voor UIImageView met de methode sd_setImage die in één regel een afbeelding uit elke bron laadt, cached en weergeeft.

De bibliotheek ondersteunt progressief laden (de afbeelding wordt weergegeven naarmate bytes binnenkomen), geanimeerde afbeeldingen (GIF, APNG), transformaties (afronden, bijsnijden, watermerk toevoegen) en aangepaste decoders. Volgens GitHub Stats heeft SDWebImage meer dan 25.000 sterren en wordt het gebruikt in grote apps zoals Twitter, Pinterest en Instagram.

De architectuur is gebaseerd op een keten van componenten: Coder (decoderen), Cache (opslag), Loader (netwerk) en Transformer (verwerking). Elk component is vervangbaar, waardoor de bibliotheek kan worden aangepast aan specifieke projectvereisten.

Hoe werkt SDWebImage: manager en cache

SDWebImageManager — centrale component die het laadproces coördineert. Het ontvangt een URL, controleert de cache, laadt gegevens, decodeert ze naar UIImage en stuurt ze door naar ImageView of Completion Handler. De manager werkt via de shared singleton, toegankelijk vanuit elk deel van de applicatie.

Laadproces

De manager controleert achtereenvolgens Memory Cache (NSDictionary met UIImage), daarna Disk Cache (bestandssysteem). Bij een misser wordt een netwerkverzoek uitgevoerd via NSURLSession. Na het laden worden de gegevens gedecodeerd, doorlopen ze transformaties en worden ze opgeslagen in beide caches. Het hele proces vindt plaats op de achtergrond, het resultaat wordt afgeleverd in de main queue.

  • Memory Cache — controle in O(1), opslag van UIImage met inachtneming van geheugenlimiet
  • Disk Cache — lezen van bestandssysteem, opslag van gecomprimeerde gegevens
  • NSURLSession — laden met ondersteuning voor HTTP/2 en configureerbare timeout

UIImageView-categorie

UIImageView+WebCache — Objective-C-categorie (toegankelijk vanuit Swift) die de methode sd_setImage toevoegt. Deze methode accepteert URL, placeholder, opties (SDWebImageOptions) en een completion-block. De categorie annuleert automatisch het vorige verzoek bij hergebruik van een tabelcel via het mechanisme sd_cancelCurrentImageLoad.

Belangrijkste klassen van SDWebImage

De architectuur van SDWebImage is verdeeld in meerdere modules met duidelijke verantwoordelijkheidsgebieden. Elke klasse lost één taak op — van laden tot weergave.

SDWebImageManager

SDWebImageManager — facade voor alle bewerkingen met afbeeldingen. Bevat verwijzingen naar ImageCache (SDImageCache) en ImageLoader (SDWebImageDownloader). Via de delegate SDWebImageManagerDelegate kan het laden worden onderschept en de URL of het gedrag worden gewijzigd.

SDImageCache

SDImageCache — tweetraps cache (memory + disk), geïnitialiseerd met een unieke namespace. Memory Cache slaat UIImage op met een configureerbare limiet (standaard — tot system memory warning). Disk Cache slaat gegevens op in de directory Library/Caches met een configureerbare bewaartermijn (standaard 7 dagen).

SDWebImageDownloader

SDWebImageDownloader — HTTP-client gebaseerd op NSURLSession met ondersteuning voor headers, timeouts en herhaalpogingen. De downloader combineert identieke verzoeken in één netwerkaanroep (deduplicatie) en verdeelt het resultaat onder alle abonnees.

Cache-architectuur van SDWebImage

SDWebImage implementeert tweetraps caching met een deterministische controle-order: eerst geheugen, dan schijf. De cachesleutel is de absolute URL van de afbeelding zonder queryparameters of de MD5-hash ervan.

NiveauOpslagtypeInhoudLimiet
Memory CacheNSCache (NSDictionary)UIImage (gedecodeerde Bitmap)Tot memory warning
Disk CacheBestandssysteemNSData (JPEG/PNG/WebP)7 dagen TTL (configureerbaar)
Auto Purge CacheMemory + DiskGecombineerde cache van frameworkConfigureerbare bestandsgrootte

Bij ontvangst van een memory warning stelt iOS SDImageCache op de hoogte via UIApplicationDidReceiveMemoryWarningNotification, waarna Memory Cache volledig wordt gewist. Disk Cache wordt gewist op basis van TTL of bij overschrijding van de limiet, met sortering van bestanden op datum van laatste toegang.

Voor handmatig cachebeheer zijn methoden beschikbaar: clearMemory, clearDisk, calculateSize. Caching kan voor specifieke verzoeken worden uitgeschakeld via de opties SDWebImageCacheMemoryOnly of SDWebImageAvoidAutoSetImage.

Voorbeelden van SDWebImage-gebruik in Swift

SDWebImage biedt meerdere interfaces voor het laden van afbeeldingen: van een eenvoudige UIImageView-categorie tot een geavanceerde manager met aangepaste verwerking.

Basis laden in UIImageView

sd_setImage — de belangrijkste methode voor het laden van een afbeelding in UIImageView. Het accepteert URL, placeholder en optionele parameters via Options en Context. Alle Completion Handlers worden uitgevoerd in de hoofdthread.

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)]
)

De methode retourneert SDWebImageToken (een bewerking) die indien nodig kan worden geannuleerd. Intern roept sd_setImage SDWebImageManager.load aan, waarbij ImageView als Target wordt doorgegeven voor het automatisch instellen van de afbeelding.

Laden met aangepaste transformatie

SDWebImage ondersteunt Transformer — een protocol met een enkele methode transformedImage. Ingebouwde transformaties: cirkel, afronding, toepassen van kleurenfilter, formaat wijzigen. Combineren van transformaties gebeurt met de operator &&.

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]
)

Gebruik met SwiftUI

De bibliotheek biedt WebImage — een View-component voor SwiftUI met ondersteuning voor placeholder, voortgangsindicator en foutafhandeling. De component abonneert zich automatisch op de levenscyclus van de View en annuleert het laden bij verdwijnen.

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()
            }
        }
    }
}

Image Transformations in SDWebImage

SDWebImage biedt een flexibel systeem voor afbeeldingstransformaties via het protocol SDImageTransformer. Transformaties worden toegepast na decodering maar vóór caching — het transformatieresultaat wordt op schijf opgeslagen onder een nieuwe sleutel, waardoor herhaalde toepassing bij volgende verzoeken wordt voorkomen.

Ingebouwde transformaties omvatten: SDImageResizingTransformer (formaat wijzigen met modus), SDImageRoundCornerTransformer (hoeken afronden met optionele rand), SDImageFlipTransformer (spiegelen) en SDImageFilterTransformer (CoreImage-filters). Combineren gebeurt met de operator &&, waardoor een verwerkingsketen ontstaat.

Voor aangepaste transformaties volstaat het implementeren van het protocol SDImageTransformer met de methode transformedImageWithImage:forKey:. De transformatiesleutel wordt automatisch toegevoegd aan de cachesleutel, waardoor conflicten tussen verschillende versies van dezelfde afbeelding worden voorkomen.

Vergelijking van SDWebImage met Kingfisher

Op het iOS-platform zijn de belangrijkste concurrenten van SDWebImage Kingfisher (puur Swift) en Nuke. De keuze tussen SDWebImage en Kingfisher hangt vaak af van de projecttaal en de gewenste functionaliteit.

KenmerkSDWebImageKingfisher
TaalObjective-C + Swift APISwift (100%)
SwiftUIWebImage ViewKFImage View
GIFJa (ingebouwd)Ja (ingebouwd)
WebPJa (plug-in)Ja (ingebouwd)
Progressief ladenJa (met plug-in)Ja
Framework grootte~1.2 MB~900 KB
CacheMemory + DiskMemory + Disk
CocoaPods ondersteuningJaJa

SDWebImage blijft de voorkeurskeuze voor projecten in Objective-C of hybride projecten. Kingfisher is geschikter voor pure Swift-projecten vanwege typeveiligheid en native Swift-syntax. Beide bibliotheken hebben een vergelijkbare cache-architectuur en snelheid.

SDWebImage configureren in een iOS-project

Het aansluiten van SDWebImage gebeurt via Swift Package Manager, CocoaPods of Carthage. De bibliotheek is verdeeld in modules: hoofd (SDWebImage), Coder (extra formaten) en MapKit (voor MKAnnotationView).

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'
// Plug-ins voor WebP en SVG:
pod 'SDWebImageWebPCoder'
pod 'SDWebImageSVGCoder'

Na installatie is de bibliotheek klaar voor gebruik zonder verdere configuratie. Voor het aanpassen van de cache wordt een exemplaar van SDImageCache gemaakt met een unieke namespace, die wordt doorgegeven aan SDWebImageManager bij initialisatie. Globale configuratie gebeurt via SDWebImageManager.shared.

swift
// Cache aanpassen
let config = SDImageCacheConfig()
config.maxDiskAge = 14 * 86400 // 14 dagen in plaats van 7
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

Veelgestelde vragen

Wat is SDWebImage en welke taken lost het op?

SDWebImage — bibliotheek voor asynchroon laden van afbeeldingen op iOS en macOS. Het lost taken op van caching, decodering, transformatie en weergave van afbeeldingen uit het netwerk, waardoor de ontwikkelaar wordt bevrijd van handmatig thread- en geheugenbeheer.

Hoe gebruik ik SDWebImage met UITableView?

Gebruik in de methode cellForRowAt sd_setImage met URL en placeholder. De bibliotheek annuleert automatisch het vorige verzoek bij hergebruik van de cel. Geef voor vloeiend scrollen de optie .progressiveLoad op en configureer de thumbnail-grootte via context.

Hoe verschilt SDWebImage van Kingfisher?

SDWebImage is geschreven in Objective-C met een Swift-wrapper, Kingfisher in puur Swift. SDWebImage heeft een breder plug-inecosysteem (WebP, SVG, MapKit). Kingfisher biedt betere typeveiligheid en integratie met Swift Concurrency.

Hoe voeg ik WebP-ondersteuning toe aan SDWebImage?

Installeer de plug-in SDWebImageWebPCoder via CocoaPods of SPM. Registreer de coder door SDImageWebPCoder.shared aan te roepen in AppDelegate. Na registratie detecteert de bibliotheek automatisch het formaat en decodeert WebP.

Hoe wis ik programmatisch de SDWebImage-cache?

Roep SDImageCache.shared.clearMemory() aan voor geheugen en SDImageCache.shared.clearDisk() voor schijf. Gebruik voor het wissen van alleen verouderde bestanden clearDisk(completion:) met TTL-controle. De methode calculateSizeWithCompletionBlock retourneert de huidige cachegrootte.

Samenvatting

  • SDWebImage — de facto standaard voor het laden van afbeeldingen op iOS met meer dan 25.000 sterren op GitHub.
  • Tweetraps cache (Memory + Disk) zorgt voor onmiddellijk laden van herhaalde afbeeldingen en offline toegang.
  • Progressief laden en ondersteuning voor GIF, WebP, SVG maken de bibliotheek tot een universele oplossing voor elk formaat.
  • SDWebImageManager biedt een uniforme facade voor laden met de mogelijkheid om elk component aan te passen.
  • WebImage voor SwiftUI maakt het mogelijk om afbeeldingen declaratief te laden met afhandeling van alle toestanden.
  • Transformaties (formaat, afronding, kleur) worden gecombineerd met de operator && en uitgevoerd vóór caching.
  • Compatibiliteit met Objective-C maakt SDWebImage toegankelijk voor legacy-projecten zonder migratie naar Swift.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook