SDWebImage: Was es ist, Schlüsselkonzepte und UIImageView

Autor: IT Sectr Veröffentlicht: 2026-05-05 Lesezeit: 8 Min.

SDWebImage ist eine Bibliothek für asynchrones Laden von Bildern auf iOS und macOS, die eine einheitliche API für die Arbeit mit Netzwerk, Cache und Animationen bietet. Laut offiziellem Repository wird die Bibliothek in mehr als 100.000 Projekten eingesetzt und unterstützt GIF, WebP, SVG und progressives Laden. SDWebImage bietet automatisches Caching auf Festplatte und im Arbeitsspeicher sowie Integration mit UIKit und SwiftUI.

Wichtige Punkte

  • SDWebImage ist eine Bibliothek für asynchrones Laden von Bildern auf iOS mit Unterstützung für Caching, Animationen und Transformationen.
  • SDWebImageManager ist die zentrale Klasse, die das Laden, Dekodieren und Cachen von Bildern koordiniert.
  • Disk Cache speichert Bilder auf dem Datenträger und ermöglicht Offline-Laden bei wiederholten Besuchen.
  • WebP und GIF werden über die Plugins SDImageWebPCoder und SDImageGIFCoder unterstützt.
  • SwiftUI — die Bibliothek stellt die View-Komponente WebImage für deklaratives Laden von Bildern bereit.

Was ist SDWebImage?

SDWebImage ist eine Bibliothek für asynchrones Laden von Bildern auf Apple-Plattformen (iOS, macOS, tvOS, watchOS). Sie stellt eine Kategorie für UIImageView mit der Methode sd_setImage bereit, die mit einer Zeile Code ein Bild aus jeder Quelle lädt, cached und anzeigt.

Die Bibliothek unterstützt progressives Laden (das Bild erscheint während des Byte-Empfangs), animierte Bilder (GIF, APNG), Transformationen (Abrunden, Zuschneiden, Wasserzeichen) und benutzerdefinierte Decoder. Laut GitHub Stats hat SDWebImage über 25.000 Sterne und wird in großen Anwendungen wie Twitter, Pinterest und Instagram eingesetzt.

Die Architektur basiert auf einer Komponentenkette: Coder (Dekodierung), Cache (Speicher), Loader (Netzwerk) und Transformer (Verarbeitung). Jede Komponente ist austauschbar, sodass die Bibliothek an spezifische Projektanforderungen angepasst werden kann.

Wie SDWebImage funktioniert: Manager und Cache

SDWebImageManager ist die zentrale Komponente, die den Ladevorgang koordiniert. Er nimmt eine URL entgegen, prüft den Cache, lädt die Daten, dekodiert sie in ein UIImage und übergibt sie an ImageView oder Completion Handler. Der Manager arbeitet über ein gemeinsames Singleton, das von überall in der Anwendung zugänglich ist.

Ladevorgang

Der Manager prüft nacheinander den Memory Cache (NSDictionary mit UIImage), dann den Disk Cache (Dateisystem). Bei einem Fehlschlag wird eine Netzwerkanfrage über NSURLSession gestellt. Nach dem Laden werden die Daten dekodiert, durchlaufen Transformationen und werden in beiden Caches gespeichert. Der gesamte Prozess läuft in einer Hintergrundwarteschlange, die Ergebnisse werden in der Hauptwarteschlange zugestellt.

  • Memory Cache — O(1)-Zugriff, speichert UIImage mit konfigurierbarem Speicherlimit
  • Disk Cache — Lesen aus dem Dateisystem, speichert komprimierte Daten
  • NSURLSession — Laden mit HTTP/2-Unterstützung und konfigurierbarem Timeout

UIImageView-Kategorie

UIImageView+WebCache ist eine Objective-C-Kategorie (von Swift zugänglich), die die Methode sd_setImage hinzufügt. Diese Methode nimmt eine URL, einen Platzhalter, Optionen (SDWebImageOptions) und einen Completion-Block entgegen. Die Kategorie bricht die vorherige Anfrage automatisch ab, wenn eine Tabellenzelle über den sd_cancelCurrentImageLoad-Mechanismus wiederverwendet wird.

Hauptklassen von SDWebImage

Die SDWebImage-Architektur ist in mehrere Module mit klaren Verantwortungsbereichen unterteilt. Jede Klasse löst eine Aufgabe — vom Laden bis zur Anzeige.

SDWebImageManager

SDWebImageManager ist die Fassade für alle Bildoperationen. Er enthält Referenzen auf ImageCache (SDImageCache) und ImageLoader (SDWebImageDownloader). Über den Delegaten SDWebImageManagerDelegate kann der Ladevorgang abgefangen und die URL oder das Verhalten geändert werden.

SDImageCache

SDImageCache ist ein zweistufiger Cache (Speicher + Festplatte), der mit einem eindeutigen Namespace initialisiert wird. Der Memory Cache speichert UIImage mit einem konfigurierbaren Limit (standardmäßig bis zur System-Speicherwarnung). Der Disk Cache speichert Daten im Verzeichnis Library/Caches mit einer konfigurierbaren Aufbewahrungsdauer (Standard 7 Tage).

SDWebImageDownloader

SDWebImageDownloader ist ein HTTP-Client basierend auf NSURLSession mit Unterstützung für Header, Timeouts und Wiederholungsversuche. Der Downloader dedupliziert identische Anfragen in einem einzigen Netzwerkaufruf und verteilt das Ergebnis an alle Abonnenten.

Caching-Architektur von SDWebImage

SDWebImage implementiert zweistufiges Caching mit einer deterministischen Prüfreihenfolge: zuerst Speicher, dann Festplatte. Der Cache-Schlüssel ist die absolute Bild-URL ohne Abfrageparameter oder ihr MD5-Hash.

EbeneSpeichertypInhaltLimit
Memory CacheNSCache (NSDictionary)UIImage (dekodierte Bitmap)Bis Speicherwarnung
Disk CacheDateisystemNSData (JPEG/PNG/WebP)7 Tage TTL (konfigurierbar)
Auto Purge CacheSpeicher + FestplatteKombinierter Framework-CacheKonfigurierbare Dateigröße

Beim Empfang einer Speicherwarnung benachrichtigt iOS SDImageCache über UIApplicationDidReceiveMemoryWarningNotification, woraufhin der Memory Cache vollständig geleert wird. Der Disk Cache wird nach TTL oder bei Überschreitung des Limits geleert, wobei die Dateien nach dem Datum des letzten Zugriffs sortiert werden.

Für die manuelle Cache-Verwaltung stehen folgende Methoden zur Verfügung: clearMemory, clearDisk, calculateSize. Das Caching kann für bestimmte Anfragen über die Optionen SDWebImageCacheMemoryOnly oder SDWebImageAvoidAutoSetImage deaktiviert werden.

SDWebImage-Anwendungsbeispiele in Swift

SDWebImage bietet mehrere Schnittstellen zum Laden von Bildern: von der einfachen UIImageView-Kategorie bis zum erweiterten Manager mit benutzerdefinierter Verarbeitung.

Basisladen in UIImageView

sd_setImage ist die primäre Methode zum Laden eines Bildes in UIImageView. Sie nimmt eine URL, einen Platzhalter und optionale Parameter über Options und Context entgegen. Alle Completion Handler werden im Hauptthread ausgeführt.

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

Die Methode gibt ein SDWebImageToken (Operation) zurück, das bei Bedarf abgebrochen werden kann. Intern ruft sd_setImage SDWebImageManager.load auf und übergibt ImageView als Target für die automatische Bildeinstellung.

Laden mit benutzerdefinierter Transformation

SDWebImage unterstützt Transformer — ein Protokoll mit einer einzigen Methode transformedImage. Integrierte Transformationen umfassen: Kreis, abgerundete Ecken, Farbfilter-Überlagerung und Größenänderung. Transformationen können mit dem &&-Operator kombiniert werden.

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

Verwendung mit SwiftUI

Die Bibliothek bietet WebImage — eine View-Komponente für SwiftUI mit Unterstützung für Platzhalter, Fortschrittsanzeige und Fehlerbehandlung. Die Komponente abonniert automatisch den Lebenszyklus der View und bricht das Laden ab, wenn sie verschwindet.

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

Bildtransformationen in SDWebImage

SDWebImage bietet ein flexibles Transformationssystem über das SDImageTransformer-Protokoll. Transformationen werden nach der Dekodierung, aber vor dem Caching angewendet — das Transformationsergebnis wird unter einem neuen Schlüssel auf der Festplatte gespeichert, um eine erneute Anwendung bei nachfolgenden Anfragen zu vermeiden.

Integrierte Transformationen umfassen: SDImageResizingTransformer (Größenänderung mit Modus), SDImageRoundCornerTransformer (abgerundete Ecken mit optionalem Rand), SDImageFlipTransformer (Spiegelung) und SDImageFilterTransformer (CoreImage-Filter). Die Kombination erfolgt über den &&-Operator, der eine Verarbeitungskette erstellt.

Für benutzerdefinierte Transformationen reicht es aus, das SDImageTransformer-Protokoll mit der Methode transformedImageWithImage:forKey: zu implementieren. Der Transformationsschlüssel wird automatisch zum Cache-Schlüssel hinzugefügt, um Kollisionen zwischen verschiedenen Versionen desselben Bildes zu vermeiden.

SDWebImage vs. Kingfisher Vergleich

Auf der iOS-Plattform sind die Hauptkonkurrenten von SDWebImage Kingfisher (reines Swift) und Nuke. Die Wahl zwischen SDWebImage und Kingfisher wird oft durch die Projektsprache und die erforderliche Funktionalität bestimmt.

MerkmalSDWebImageKingfisher
SpracheObjective-C + Swift APISwift (100%)
SwiftUIWebImage ViewKFImage View
GIFJa (integriert)Ja (integriert)
WebPJa (Plugin)Ja (integriert)
Progressives LadenJa (mit Plugin)Ja
Framework-Größe~1.2 MB~900 KB
CacheSpeicher + FestplatteSpeicher + Festplatte
CocoaPods-UnterstützungJaJa

SDWebImage bleibt die bevorzugte Wahl für Objective-C-Projekte oder Hybridprojekte. Kingfisher eignet sich besser für reine Swift-Projekte dank Typsicherheit und nativer Swift-Syntax. Beide Bibliotheken haben eine ähnliche Caching-Architektur und Leistung.

SDWebImage in einem iOS-Projekt einrichten

SDWebImage kann über Swift Package Manager, CocoaPods oder Carthage integriert werden. Die Bibliothek ist in Module unterteilt: Kern (SDWebImage), Coder (zusätzliche Formate) und MapKit (für 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'
// Plugins für WebP und SVG:
pod 'SDWebImageWebPCoder'
pod 'SDWebImageSVGCoder'

Nach der Installation ist die Bibliothek ohne zusätzliche Konfiguration einsatzbereit. Für die Cache-Anpassung erstellen Sie eine Instanz von SDImageCache mit einem eindeutigen Namespace und übergeben sie an SDWebImageManager bei der Initialisierung. Die globale Konfiguration erfolgt über SDWebImageManager.shared.

swift
// Cache-Anpassung
let config = SDImageCacheConfig()
config.maxDiskAge = 14 * 86400 // 14 Tage statt 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

Häufig gestellte Fragen

Was ist SDWebImage und welche Probleme löst es?

SDWebImage ist eine Bibliothek für asynchrones Laden von Bildern auf iOS und macOS. Sie löst die Probleme des Cachings, Dekodierens, Transformierens und Anzeigens von Bildern aus dem Netzwerk und befreit den Entwickler von der manuellen Thread- und Speicherverwaltung.

Wie verwendet man SDWebImage mit UITableView?

Verwenden Sie in der cellForRowAt-Methode sd_setImage mit einer URL und einem Platzhalter. Die Bibliothek bricht die vorherige Anfrage automatisch ab, wenn die Zelle wiederverwendet wird. Für flüssiges Scrollen geben Sie die Option .progressiveLoad an und konfigurieren Sie die Thumbnail-Größe über den Kontext.

Was ist der Unterschied zwischen SDWebImage und Kingfisher?

SDWebImage ist in Objective-C mit einem Swift-Wrapper geschrieben, während Kingfisher in reinem Swift geschrieben ist. SDWebImage hat ein größeres Plugin-Ökosystem (WebP, SVG, MapKit). Kingfisher bietet bessere Typsicherheit und Integration mit Swift Concurrency.

Wie fügt man WebP-Unterstützung zu SDWebImage hinzu?

Installieren Sie das Plugin SDWebImageWebPCoder über CocoaPods oder SPM. Registrieren Sie den Coder durch Aufruf von SDImageWebPCoder.shared im AppDelegate. Nach der Registrierung erkennt die Bibliothek automatisch das Format und dekodiert WebP.

Wie löscht man den SDWebImage-Cache programmatisch?

Rufen Sie SDImageCache.shared.clearMemory() für den Speicher und SDImageCache.shared.clearDisk() für die Festplatte auf. Um nur veraltete Dateien zu löschen, verwenden Sie clearDisk(completion:) mit TTL-Prüfung. Die Methode calculateSizeWithCompletionBlock gibt die aktuelle Cache-Größe zurück.

Zusammenfassung

  • SDWebImage ist der De-facto-Standard für das Laden von Bildern auf iOS mit über 25.000 Sternen auf GitHub.
  • Zweistufiger Cache (Speicher + Festplatte) sorgt für sofortiges Laden wiederholter Bilder und Offline-Zugriff.
  • Progressives Laden und Unterstützung für GIF, WebP, SVG machen die Bibliothek zu einer universellen Lösung für jedes Format.
  • SDWebImageManager bietet eine einheitliche Fassade für das Laden mit der Möglichkeit, jede Komponente anzupassen.
  • WebImage für SwiftUI ermöglicht das Laden von Bildern in deklarativem Stil mit vollständiger Zustandsverwaltung.
  • Transformationen (Größe, Abrundung, Farbe) werden mit dem &&-Operator kombiniert und vor dem Caching angewendet.
  • Objective-C-Kompatibilität macht SDWebImage für Legacy-Projekte zugänglich, ohne auf Swift migrieren zu müssen.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch