SDWebImage: nedir, temel kavramlar ve UIImageView

Yazar: IT Sectr Yayınlanma: 2026-05-05 Okuma süresi: 8 dk

SDWebImage, iOS ve macOS'ta zaman uyumsuz görüntü yükleme için bir kitaplıktır ve ağ, önbellek ve animasyonlarla çalışmak için birleşik bir API sağlar. Resmi depoya göre, kitaplık 100.000'den fazla projede kullanılmakta ve GIF, WebP, SVG ve aşamalı yüklemeyi desteklemektedir. SDWebImage, diskte ve bellekte otomatik önbelleklemenin yanı sıra UIKit ve SwiftUI ile entegrasyon sağlar.

Önemli Noktalar

  • SDWebImage, iOS'ta önbellekleme, animasyonlar ve dönüşümleri destekleyen zaman uyumsuz görüntü yükleme kitaplığıdır.
  • SDWebImageManager, görüntü yükleme, kod çözme ve önbelleklemeyi koordine eden merkezi sınıftır.
  • Disk Önbelleği, görüntüleri depolama birimine kaydederek sonraki ziyaretlerde çevrimdışı yüklemeyi sağlar.
  • WebP ve GIF, SDImageWebPCoder ve SDImageGIFCoder eklentileri aracılığıyla desteklenir.
  • SwiftUI — kitaplık, bildirimsel görüntü yükleme için WebImage View bileşenini sağlar.

SDWebImage nedir?

SDWebImage, Apple platformlarında (iOS, macOS, tvOS, watchOS) zaman uyumsuz görüntü yükleme için bir kitaplıktır. UIImageView için sd_setImage yöntemiyle bir kategori sağlar ve tek bir kod satırıyla herhangi bir kaynaktan görüntü yükler, önbelleğe alır ve görüntüler.

Kitaplık aşamalı yüklemeyi (baytlar alındıkça görüntü görünür), animasyonlu görüntüleri (GIF, APNG), dönüşümleri (yuvarlama, kırpma, filigran ekleme) ve özel kod çözücüleri destekler. GitHub İstatistiklerine göre, SDWebImage 25.000'den fazla yıldıza sahiptir ve Twitter, Pinterest ve Instagram dahil olmak üzere büyük uygulamalarda kullanılmaktadır.

Mimari bir bileşen zinciri üzerine kurulmuştur: Coder (kod çözme), Cache (depolama), Loader (ağ) ve Transformer (işleme). Her bileşen değiştirilebilir, bu da kitaplığın belirli proje gereksinimlerine uyarlanmasına olanak tanır.

SDWebImage nasıl çalışır: yönetici ve önbellek

SDWebImageManager, yükleme sürecini koordine eden merkezi bileşendir. Bir URL alır, önbelleği kontrol eder, verileri yükler, UIImage'e kod çözer ve ImageView veya Completion Handler'a iletir. Yönetici, uygulamanın her yerinden erişilebilen paylaşılan bir singleton aracılığıyla çalışır.

Yükleme süreci

Yönetici sırasıyla Bellek Önbelleğini (UIImage ile NSDictionary), ardından Disk Önbelleğini (dosya sistemi) kontrol eder. Bulunamadığında, NSURLSession aracılığıyla bir ağ isteği yapılır. Yüklemeden sonra veriler kod çözülür, dönüşümlerden geçer ve her iki önbelleğe kaydedilir. Tüm süreç arka plan kuyruğunda çalışır ve sonuçlar ana kuyruğa teslim edilir.

  • Bellek Önbelleği — O(1) arama, yapılandırılabilir bellek sınırıyla UIImage depolar
  • Disk Önbelleği — dosya sisteminden okur, sıkıştırılmış veri depolar
  • NSURLSession — HTTP/2 desteği ve yapılandırılabilir zaman aşımıyla yükleme

UIImageView Kategorisi

UIImageView+WebCache, sd_setImage yöntemini ekleyen bir Objective-C kategorisidir (Swift'ten erişilebilir). Bu yöntem bir URL, placeholder, seçenekler (SDWebImageOptions) ve bir tamamlama bloğu alır. Kategori, sd_cancelCurrentImageLoad mekanizması aracılığıyla bir tablo hücresi yeniden kullanıldığında önceki isteği otomatik olarak iptal eder.

SDWebImage temel sınıfları

SDWebImage mimarisi, net sorumluluk alanlarına sahip birkaç modüle ayrılmıştır. Her sınıf, yüklemeden görüntülemeye kadar tek bir görevi çözer.

SDWebImageManager

SDWebImageManager, tüm görüntü işlemleri için cephedir. ImageCache (SDImageCache) ve ImageLoader'a (SDWebImageDownloader) referanslar içerir. SDWebImageManagerDelegate aracılığıyla yüklemeyi durdurabilir ve URL'yi veya davranışı değiştirebilirsiniz.

SDImageCache

SDImageCache, benzersiz bir ad alanıyla başlatılan iki düzeyli bir önbellektir (bellek + disk). Bellek Önbelleği, yapılandırılabilir bir sınırla (varsayılan olarak — sistem bellek uyarısına kadar) UIImage depolar. Disk Önbelleği, Library/Caches dizininde yapılandırılabilir bir saklama süresiyle (varsayılan 7 gün) veri depolar.

SDWebImageDownloader

SDWebImageDownloader, başlıklar, zaman aşımları ve yeniden denemeler desteğiyle NSURLSession tabanlı bir HTTP istemcisidir. İndirici, aynı istekleri tek bir ağ çağrısında tekilleştirir ve sonucu tüm abonelere dağıtır.

SDWebImage önbellek mimarisi

SDWebImage, belirleyici bir kontrol sırasıyla iki düzeyli önbellekleme uygular: önce bellek, sonra disk. Önbellek anahtarı, sorgu parametreleri olmayan mutlak görüntü URL'si veya MD5 hash'idir.

DüzeyDepolama türüİçerikSınır
Bellek ÖnbelleğiNSCache (NSDictionary)UIImage (kod çözülmüş Bitmap)Bellek uyarısına kadar
Disk ÖnbelleğiDosya sistemiNSData (JPEG/PNG/WebP)7 gün TTL (yapılandırılabilir)
Otomatik Temizleme ÖnbelleğiBellek + DiskBirleşik framework önbelleğiYapılandırılabilir dosya boyutu

Bir bellek uyarısı aldığında, iOS UIApplicationDidReceiveMemoryWarningNotification aracılığıyla SDImageCache'i bilgilendirir ve ardından Bellek Önbelleği tamamen temizlenir. Disk Önbelleği, TTL'ye göre veya sınır aşıldığında, dosyalar son erişim tarihine göre sıralanarak temizlenir.

Manuel önbellek yönetimi için şu yöntemler mevcuttur: clearMemory, clearDisk, calculateSize. SDWebImageCacheMemoryOnly veya SDWebImageAvoidAutoSetImage seçenekleri kullanılarak belirli istekler için önbellekleme devre dışı bırakılabilir.

Swift'te SDWebImage kullanım örnekleri

SDWebImage, görüntü yüklemek için çeşitli arayüzler sağlar: basit UIImageView kategorisinden özel işlemeli gelişmiş yöneticiye kadar.

UIImageView'de temel yükleme

sd_setImage, UIImageView'e görüntü yüklemek için birincil yöntemdir. Bir URL, placeholder ve Options ile Context aracılığıyla isteğe bağlı parametreler alır. Tüm Completion Handler'lar ana iş parçacığında yürütülür.

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

Yöntem, gerektiğinde iptal edilebilen bir SDWebImageToken (işlem) döndürür. Dahili olarak, sd_setImage, otomatik görüntü ayarı için ImageView'ı Target olarak ileterek SDWebImageManager.load'u çağırır.

Özel dönüşümle yükleme

SDWebImage, Transformer'ı — tek bir transformedImage yöntemine sahip bir protokolü destekler. Yerleşik dönüşümler şunları içerir: daire, yuvarlak köşeler, renk filtresi kaplaması ve yeniden boyutlandırma. Dönüşümler && operatörü kullanılarak birleştirilebilir.

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 ile kullanım

Kitaplık, placeholder, ilerleme göstergesi ve hata işleme desteğiyle SwiftUI için WebImage adlı bir View bileşeni sağlar. Bileşen otomatik olarak View yaşam döngüsüne abone olur ve kaybolduğunda yüklemeyi iptal eder.

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'de görüntü dönüşümleri

SDWebImage, SDImageTransformer protokolü aracılığıyla esnek bir dönüşüm sistemi sağlar. Dönüşümler kod çözmeden sonra ancak önbelleklemeden önce uygulanır — dönüşüm sonucu diskte yeni bir anahtar altında saklanır ve sonraki isteklerde yeniden uygulanması önlenir.

Yerleşik dönüşümler şunları içerir: SDImageResizingTransformer (mode ile yeniden boyutlandırma), SDImageRoundCornerTransformer (isteğe bağlı kenarlıklı yuvarlak köşeler), SDImageFlipTransformer (yansıtma) ve SDImageFilterTransformer (CoreImage filtreleri). Birleştirme && operatörü aracılığıyla yapılır ve bir işleme zinciri oluşturur.

Özel dönüşümler için, transformedImageWithImage:forKey: yöntemiyle SDImageTransformer protokolünü uygulamak yeterlidir. Dönüşüm anahtarı otomatik olarak önbellek anahtarına eklenir ve aynı görüntünün farklı sürümleri arasında çakışmaları önler.

SDWebImage ve Kingfisher karşılaştırması

iOS platformunda SDWebImage'ın ana rakipleri Kingfisher (saf Swift) ve Nuke'dur. SDWebImage ve Kingfisher arasındaki seçim genellikle proje diline ve gerekli işlevselliğe göre belirlenir.

ÖzellikSDWebImageKingfisher
DilObjective-C + Swift APISwift (100%)
SwiftUIWebImage ViewKFImage View
GIFEvet (yerleşik)Evet (yerleşik)
WebPEvet (eklenti)Evet (yerleşik)
Aşamalı yüklemeEvet (eklentiyle)Evet
Framework boyutu~1.2 MB~900 KB
ÖnbellekBellek + DiskBellek + Disk
CocoaPods desteğiEvetEvet

SDWebImage, Objective-C projeleri veya hibrit projeler için tercih edilen seçim olmaya devam etmektedir. Kingfisher, tür güvenliği ve yerel Swift sözdizimi sayesinde saf Swift projeleri için daha uygundur. Her iki kitaplık da benzer önbellek mimarisine ve performansa sahiptir.

iOS projesinde SDWebImage kurulumu

SDWebImage, Swift Package Manager, CocoaPods veya Carthage aracılığıyla entegre edilebilir. Kitaplık modüllere ayrılmıştır: çekirdek (SDWebImage), Coder (ek formatlar) ve MapKit (MKAnnotationView için).

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

// CocoaPods (Podfile)
pod 'SDWebImage', '~> 5.19.0'
// WebP ve SVG için eklentiler:
pod 'SDWebImageWebPCoder'
pod 'SDWebImageSVGCoder'

Kurulumdan sonra kitaplık ek yapılandırma gerektirmeden kullanıma hazırdır. Önbellek özelleştirmesi için, benzersiz bir ad alanına sahip bir SDImageCache örneği oluşturun ve başlatma sırasında SDWebImageManager'a iletin. Genel yapılandırma SDWebImageManager.shared aracılığıyla yapılır.

swift
// Önbellek özelleştirmesi
let config = SDImageCacheConfig()
config.maxDiskAge = 14 * 86400 // 7 yerine 14 gün
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

Sıkça sorulan sorular

SDWebImage nedir ve hangi sorunları çözer?

SDWebImage, iOS ve macOS'ta zaman uyumsuz görüntü yükleme için bir kitaplıktır. Ağdaki görüntüleri önbelleğe alma, kod çözme, dönüştürme ve görüntüleme sorunlarını çözer ve geliştiriciyi manuel iş parçacığı ve bellek yönetiminden kurtarır.

SDWebImage UITableView ile nasıl kullanılır?

cellForRowAt yönteminde, bir URL ve placeholder ile sd_setImage kullanın. Hücre yeniden kullanıldığında kitaplık önceki isteği otomatik olarak iptal eder. Pürüzsüz kaydırma için .progressiveLoad seçeneğini belirtin ve bağlam aracılığıyla küçük resim boyutunu yapılandırın.

SDWebImage Kingfisher'dan nasıl farklıdır?

SDWebImage, Swift sarmalayıcılı Objective-C ile yazılmıştır, Kingfisher ise saf Swift ile yazılmıştır. SDWebImage daha geniş bir eklenti ekosistemine (WebP, SVG, MapKit) sahiptir. Kingfisher daha iyi tür güvenliği ve Swift Concurrency entegrasyonu sağlar.

SDWebImage'a WebP desteği nasıl eklenir?

SDWebImageWebPCoder eklentisini CocoaPods veya SPM aracılığıyla yükleyin. AppDelegate'te SDImageWebPCoder.shared çağrısıyla kodlayıcıyı kaydedin. Kayıttan sonra kitaplık otomatik olarak biçimi algılar ve WebP'yi kod çözer.

SDWebImage önbelleği programlama yoluyla nasıl temizlenir?

Bellek için SDImageCache.shared.clearMemory() ve disk için SDImageCache.shared.clearDisk() çağrısını yapın. Yalnızca güncel olmayan dosyaları temizlemek için TTL kontrolüyle clearDisk(completion:) kullanın. calculateSizeWithCompletionBlock yöntemi geçerli önbellek boyutunu döndürür.

Özet

  • SDWebImage, GitHub'da 25.000'den fazla yıldızla iOS'ta görüntü yüklemenin fiili standardıdır.
  • İki düzeyli önbellek (Bellek + Disk), tekrarlanan görüntülerin anında yüklenmesini ve çevrimdışı erişimi sağlar.
  • Aşamalı yükleme ve GIF, WebP, SVG desteği, kitaplığı herhangi bir biçim için evrensel bir çözüm haline getirir.
  • SDWebImageManager, her bileşeni özelleştirme olanağıyla yükleme için birleşik bir cephe sağlar.
  • SwiftUI için WebImage, tüm durumları yöneterek bildirime dayalı tarzda görüntü yüklemeye olanak tanır.
  • Dönüşümler (boyut, yuvarlama, renk) && operatörüyle birleştirilir ve önbelleklemeden önce uygulanır.
  • Objective-C uyumluluğu, Swift'e geçmeden SDWebImage'ı eski projeler için erişilebilir kılar.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun