SDWebImage: یہ کیا ہے، بنیادی مفاہیم اور UIImageView

مصنف: IT Sectr اشاعت: 2026-05-05 مطالعے کا وقت: 8 منٹ

SDWebImage iOS اور macOS پر غیر متزامن تصویر لوڈنگ کے لیے ایک لائبریری ہے، جو نیٹ ورک، کیش اور اینیمیشن کے ساتھ کام کرنے کے لیے ایک متحد API فراہم کرتی ہے۔ سرکاری ریپازٹری کے مطابق، یہ لائبریری 100,000 سے زیادہ منصاب میں استعمال ہوتی ہے اور GIF، WebP، SVG اور پروگریو لوڈنگ کی حمایت کرتی ہے۔ SDWebImage ڈسک اور میموری پر خودکار کیشنگ فراہم کرتی ہے، ساتھ ہی UIKit اور SwiftUI کے ساتھ انٹیگریشن بھی فراہم کرتی ہے۔

اہم نکات

  • SDWebImage iOS پر کیشنگ، اینیمیشن اور ٹرانسفارمیشن کی حمایت کے ساتھ غیر متزامن تصویر لوڈنگ کے لیے ایک لائبریری ہے۔
  • SDWebImageManager مرکزی کلاس ہے جو تصویر لوڈنگ، ڈی کوڈنگ اور کیشنگ کو ہم آہنگ کرتا ہے۔
  • ڈسک کیش تصاویر کو اسٹوریج پر محفوظ کرتی ہے، بعد کے دورے میں آف لائن لوڈنگ کو قابل بناتی ہے۔
  • WebP اور GIF SDImageWebPCoder اور SDImageGIFCoder پلگ ان کے ذریعے حمایت یافتہ ہیں۔
  • SwiftUI — لائبریری اعلانی تصویر لوڈنگ کے لیے WebImage View کمپوننٹ فراہم کرتی ہے۔

SDWebImage کیا ہے؟

SDWebImage Apple پلیٹ فارمز (iOS، macOS، tvOS، watchOS) پر غیر متزامن تصویر لوڈنگ کے لیے ایک لائبریری ہے۔ یہ UIImageView کے لیے sd_setImage میتھڈ کے ساتھ ایک زمرہ فراہم کرتی ہے، جو کوڈ کی ایک سطر میں کسی بھی ذریعے سے تصویر کو لوڈ، کیش اور ڈسپلے کرتی ہے۔

یہ لائبریری پروگریو لوڈنگ (بائٹس موصول ہونے پر تصویر ظاہر ہوتی ہے)، متحرک تصاویر (GIF، APNG)، ٹرانسفارمیشن (گول کرنا، کروپنگ، واٹر مارک کرنا) اور کسٹم ڈی کوڈر کی حمایت کرتی ہے۔ GitHub اشاروں کے مطابق، SDWebImage کے 25,000 سے زیادہ اسٹار ہیں اور یہ Twitter، Pinterest اور Instagram سمیت بڑے ایپلیکیشنز میں استعمال ہوتا ہے۔

آرکیٹیکچر ایک کمپوننٹ چین پر بنا ہے: Coder (ڈی کوڈنگ)، Cache (اسٹوریج)، Loader (نیٹ ورک) اور Transformer (پروسیسنگ)۔ ہر کمپوننٹ بدلنے کے قابل ہے، جو لائبریری کو منصوبے کی مخصوص ضروریات کے مطابق ڈھالنے کی اجازت دیتا ہے۔

SDWebImage کیسے کام کرتا ہے: مینیجر اور کیش

SDWebImageManager مرکزی کمپوننٹ ہے جو لوڈنگ کے عمل کو ہم آہنگ کرتا ہے۔ یہ URL وصول کرتا ہے، کیش چیک کرتا ہے، ڈیٹا لوڈ کرتا ہے، اسے UIImage میں ڈی کوڈ کرتا ہے اور ImageView یا Completion Handler کو بھیجتا ہے۔ مینیجر ایک مشترک سنگل ٹن کے ذریعے کام کرتا ہے، جو ایپلیکیشن میں کہیں بھی قابل رسائی ہے۔

لوڈنگ کا عمل

مینیجر مسلسل طور پر میموری کیش (UIImage کے ساتھ NSDictionary)، پھر ڈسک کیش (فائل سسٹم) کو چیک کرتا ہے۔ نہ ملنے پر، NSURLSession کے ذریعے ایک نیٹ ورک درخواست کی جاتی ہے۔ لوڈنگ کے بعد، ڈیٹا کو ڈی کوڈ کیا جاتا ہے، ٹرانسفارمیشن سے گزرتا ہے اور دونوں کیشوں میں محفوظ کیا جاتا ہے۔ پورا عمل ایک بیک گراؤنڈ قطار میں چلتا ہے، نتائج مرکزی قطار میں پہنچائے جاتے ہیں۔

  • میموری کیش — O(1) لوک اپ، ترتیب پذیر میموری حد کے ساتھ UIImage محفوظ کرتی ہے
  • ڈسک کیش — فائل سسٹم سے پڑھتی ہے، کمپریشڈ ڈیٹا محفوظ کرتی ہے
  • NSURLSession — HTTP/2 حمایت اور ترتیب پذیر طویل انتظار کے ساتھ لوڈنگ

UIImageView زمرہ

UIImageView+WebCache ایک Objective-C زمرہ ہے (Swift سے قابل رسائی) جو sd_setImage میتھڈ کو شامل کرتا ہے۔ یہ میتھڈ URL، placeholder، اختیارات (SDWebImageOptions) اور ایک تکمیلی بلاک وصول کرتی ہے۔ زمرہ sd_cancelCurrentImageLoad میکینزم کے ذریعے ٹیبل سیل کے دوبارہ استعمال پر پچھلی درخواست کو خودکار طور پر منسوخ کر دیتی ہے۔

SDWebImage کی اہم کلاسیں

SDWebImage کا آرکیٹیکچر واضح ذمہ داریوں کے ساتھ کئی ماڈیولز میں تقسیم ہے۔ ہر کلاس ایک کام حل کرتی ہے — لوڈنگ سے لے کر ڈسپلے تک۔

SDWebImageManager

SDWebImageManager تمام تصویری عملیات کے لیے فیساڈ ہے۔ اس میں ImageCache (SDImageCache) اور ImageLoader (SDWebImageDownloader) کے حوالے شامل ہیں۔ SDWebImageManagerDelegate کے ذریعے، آپ لوڈنگ کو روک سکتے ہیں اور URL یا رویہ بدل سکتے ہیں۔

SDImageCache

SDImageCache ایک دو سطحی کیش (میموری + ڈسک) ہے جو ایک منفرد نیم اسپیس کے ساتھ ابتدائیہ کی جاتی ہے۔ میموری کیش UIImage کو ترتیب پذیر حد کے ساتھ محفوظ کرتی ہے (پہلے سے طے طور پر — سسٹم میموری انتہاہ تک)۔ ڈسک کیش Library/Caches ڈائریکٹری میں ترتیب پذیر میعاد اتمام (پہلے سے طے 7 دن) کے ساتھ ڈیٹا محفوظ کرتی ہے۔

SDWebImageDownloader

SDWebImageDownloader ایک HTTP کلائنٹ ہے جو NSURLSession پر مبنی ہے اور ہیڈرز، طویل انتظار اور دوبارہ کوششوں کی حمایت کرتا ہے۔ ڈاؤن لوڈر ایک جیسی درخواستوں کو ایک نیٹ ورک کال میں ڈی ڈپلیکیٹ کرتا ہے اور نتیجہ تمام سبسکرائبرز میں تقسیم کرتا ہے۔

SDWebImage کی کیشنگ آرکیٹیکچر

SDWebImage ایک متعین چیک ترتیب کے ساتھ دو سطحی کیشنگ نافذ کرتا ہے: پہلے میموری، پھر ڈسک۔ کیش کی کنجی استعلام پیرامیٹرز کے بغیر مکمل URL یا اس کا MD5 ہیش ہے۔

سطحاسٹوریج کی قسمموادحد
میموری کیشNSCache (NSDictionary)UIImage (ڈی کوڈ شدہ Bitmap)میموری انتہاہ تک
ڈسک کیشفائل سسٹمNSData (JPEG/PNG/WebP)7 دن TTL (ترتیب پذیر)
خودکار صاف کرنے والی کیشمیموری + ڈسکمشترکہ فریم ورک کیشترتیب پذیر فائل کا حجم

میموری انتہاہ موصول ہونے پر، iOS UIApplicationDidReceiveMemoryWarningNotification کے ذریعے SDImageCache کو مطلع کرتا ہے، جس کے بعد میموری کیش مکمل طور پر صاف ہو جاتی ہے۔ ڈسک کیش TTL کے مطابق یا حد تجاوز کرنے پر صاف کی جاتی ہے، فائلوں کو آخر رسائی کی تاریخ کے مطابق ترتیب دے کر۔

دستی کیش انتظام کے لیے مندرجہ ذیل طریقے دستیاب ہیں: clearMemory، clearDisk، calculateSize۔ SDWebImageCacheMemoryOnly یا SDWebImageAvoidAutoSetImage اختیارات کا استعمال کرکے مخصوص درخواستوں کے لیے کیشنگ کو ناقابل فعال کیا جا سکتا ہے۔

Swift میں SDWebImage کے استعمال کی مثالیں

SDWebImage تصاویر کو لوڈ کرنے کے لیے کئی انٹرفیس فراہم کرتی ہے: سادہ UIImageView زمرہ سے لے کر کسٹم پروسیسنگ کے ساتھ اعلیٰ مینیجر تک۔

UIImageView میں بنیادی لوڈنگ

sd_setImage UIImageView میں تصویر لوڈ کرنے کا بنیادی طریقہ ہے۔ یہ URL، placeholder اور Options اور Context کے ذریعے اختیاری پیرامیٹرز وصول کرتی ہے۔ تمام Completion Handler مرکزی تھریڈ پر عمل کرتے ہیں۔

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

یہ میتھڈ ایک SDWebImageToken (عمل) واپس کرتی ہے جسے ضرورت پر منسوخ کیا جا سکتا ہے۔ اندرونی طور پر، sd_setImage SDWebImageManager.load کو کال کرتی ہے، خودکار تصویر ترتیب کے لیے ImageView کو Target کے طور پر پاس کرتی ہے۔

کسٹم ٹرانسفارمیشن کے ساتھ لوڈنگ

SDWebImage Transformer کی حمایت کرتا ہے — ایک پروٹوکول جیس میں ایک واحد transformedImage میتھڈ ہے۔ بنابنیا ٹرانسفارمیشن میں شامل ہیں: دائرہ، گول کونے، رنگ فلٹر اور لیپر اور حجم بدلنا۔ ٹرانسفارمیشن کو && آپریٹر کا استعمال کرکے مشترک کیا جا سکتا ہے۔

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 کے ساتھ استعمال

لائبریری WebImage فراہم کرتی ہے — SwiftUI کے لیے ایک View کمپوننٹ جو placeholder، پیشرفت اشارہ اور غلطی کے انتظام کی حمایت کرتا ہے۔ یہ کمپوننٹ خودکار طور پر View کے لائف سائیکل کو سبسکرائب کرتا ہے اور غائب ہونے پر لوڈنگ منسوخ کر دیتا ہے۔

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 میں تصویر کی ٹرانسفارمیشن

SDWebImage SDImageTransformer پروٹوکول کے ذریعے ایک لچیلا ٹرانسفارمیشن سسٹم فراہم کرتا ہے۔ ٹرانسفارمیشن ڈی کوڈنگ کے بعد لیکن کیشنگ سے پہلے لاگو کی جاتی ہے — ٹرانسفارمیشن کا نتیجہ ایک نئی کنجی کے تحت ڈسک پر محفوظ کیا جاتا ہے، جو بعد کی درخواستوں پر دوبارہ لاگو ہونے سے روکتا ہے۔

بنابنیا ٹرانسفارمیشن میں شامل ہیں: SDImageResizingTransformer (mode کے ساتھ حجم بدلنا)، SDImageRoundCornerTransformer (اختیاری بارڈر کے ساتھ گول کونے)، SDImageFlipTransformer (میررنگ) اور SDImageFilterTransformer (CoreImage فلٹرز)۔ && آپریٹر کے ذریعے انتظام کیا جاتا ہے، ایک پروسیسنگ چین بناتا ہے۔

کسٹم ٹرانسفارمیشن کے لیے، transformedImageWithImage:forKey: میتھڈ کے ساتھ SDImageTransformer پروٹوکول نافذ کرنا کافی ہے۔ ٹرانسفارمیشن کی کنجی خودکار طور پر کیش کنجی میں شامل ہو جاتی ہے، ایک ہی تصویر کے مختلف ورشنوں کے درمیان ٹکراو کو روکتا ہے۔

SDWebImage اور Kingfisher کا موازنہ

iOS پلیٹ فارم پر SDWebImage کے اہم مقابل Kingfisher (خالص Swift) اور Nuke ہیں۔ SDWebImage اور Kingfisher کے درمیان انتخاب کا انحصار منصوبے کی زبان اور مطلوبہ فنکشنالٹی کے مطابق ہوتا ہے۔

خصوصیتSDWebImageKingfisher
زبانObjective-C + Swift APISwift (100%)
SwiftUIWebImage ViewKFImage View
GIFہاں (بنابنیا)ہاں (بنابنیا)
WebPہاں (پلگ ان)ہاں (بنابنیا)
پروگریو لوڈنگہاں (پلگ ان کے ساتھ)ہاں
فریم ورک کا حجم~1.2 MB~900 KB
کیشمیموری + ڈسکمیموری + ڈسک
CocoaPods حمایتہاںہاں

SDWebImage Objective-C مناصب یا ہائبرڈ مناصب کے لیے ترجیحی منتخب ہے۔ Kingfisher تیر حفاظت اور مقامی Swift سینٹیکس کی وجہ سے خالص Swift مناصب کے لیے بہتر موزوں ہے۔ دونوں لائبریریوں کی کیشنگ آرکیٹیکچر اور کارکردگی ایک جیسی ہے۔

iOS منصوبے میں SDWebImage کی ترتیب

SDWebImage کو Swift Package Manager، CocoaPods یا Carthage کے ذریعے ضم کیا جا سکتا ہے۔ لائبریری ماڈیولز میں تقسیم ہے: بنیاد (SDWebImage)، Coder (اضافی فارمیٹ) اور MapKit (MKAnnotationView کے لیے)۔

swift
// Swift پیکیج مینیجر (Package.swift)
dependencies: [
    .package(
        url: "https://github.com/SDWebImage/SDWebImage.git",
        from: "5.19.0"
    )
]

// CocoaPods (Podfile)
pod 'SDWebImage', '~> 5.19.0'
// WebP اور SVG کے لیے پلاگان:
pod 'SDWebImageWebPCoder'
pod 'SDWebImageSVGCoder'

تنصیب کے بعد، لائبریری بغیر کسی اضافی ترتیب کے استعمال کے لیے تیار ہے۔ کیش کی کسٹمائزیشن کے لیے، ایک منفرد نیم اسپیس کے ساتھ SDImageCache کا ایک مثال بنائیں اور ابتدائیہ کے دوران SDWebImageManager کو دیں۔ عالمی ترتیب SDWebImageManager.shared کے ذریعے کی جاتی ہے۔

swift
// کیش کسٹمائیزیشن
let config = SDImageCacheConfig()
config.maxDiskAge = 14 * 86400 // 7 کے بجائے 14 دن
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

اکثر پوچھے جانے والے سوالات

SDWebImage کیا ہے اور یہ کن مسائل حل کرتا ہے؟

SDWebImage iOS اور macOS پر غیر متزامن تصویر لوڈنگ کے لیے ایک لائبریری ہے۔ یہ نیٹ ورک سے تصاویر کو کیش کرنے، ڈی کوڈ کرنے، ٹرانسفارم کرنے اور ڈسپلے کرنے کے مسائل حل کرتی ہے، ڈیولپر کو دستی تھریڈ اور میموری انتظام سے آزاد کرتی ہے۔

SDWebImage کو UITableView کے ساتھ کیسے استعمال کریں؟

cellForRowAt میتھڈ میں، URL اور placeholder کے ساتھ sd_setImage استعمال کریں۔ سیل کے دوبارہ استعمال پر لائبریری خودکار طور پر پچھلی درخواست کو منسوخ کر دیتی ہے۔ ہموار اسکرول کے لیے، .progressiveLoad اختیار کی وضاحت کریں اور سیاق کے ذریعے تھمب نیل کا حجم متعین کریں۔

SDWebImage Kingfisher سے کیسے مختلف ہے؟

SDWebImage Swift ریپر کے ساتھ Objective-C میں لکھا گیا ہے، جبکہ Kingfisher خالص Swift میں لکھا گیا ہے۔ SDWebImage کا وسیع پلگ ان ایکو سسٹم (WebP، SVG، MapKit) ہے۔ Kingfisher بہتر تیر حفاظت اور Swift Concurrency انٹیگریشن فراہم کرتا ہے۔

SDWebImage میں WebP حمایت کیسے شامل کریں؟

CocoaPods یا SPM کے ذریعے SDWebImageWebPCoder پلگ ان انسٹال کریں۔ AppDelegate میں SDImageWebPCoder.shared کو کال کرکے کوڈر رجسٹر کریں۔ رجسٹریشن کے بعد، لائبریری خودکار طور پر فارمیٹ کا پتہ لگاتی ہے اور WebP کو ڈی کوڈ کرتی ہے۔

SDWebImage کیش کو پروگرامی طور پر کیسے صاف کریں؟

میموری کے لیے SDImageCache.shared.clearMemory() اور ڈسک کے لیے SDImageCache.shared.clearDisk() کو کال کریں۔ صرف پرانی فائلوں کو صاف کرنے کے لیے، TTL چیک کے ساتھ clearDisk(completion:) استعمال کریں۔ calculateSizeWithCompletionBlock میتھڈ موجودہ کیش کا حجم واپس کرتی ہے۔

خلاصہ

  • SDWebImage GitHub پر 25,000 سے زیادہ اسٹاروں کے ساتھ iOS پر تصویر لوڈنگ کا حقیقی معیار ہے۔
  • دو سطحی کیش (میموری + ڈسک) دوبارہ دیئے گئے تصاویر کی فوری لوڈنگ اور آف لائن رسائی کو یقینی بناتی ہے۔
  • پروگریو لوڈنگ اور GIF، WebP، SVG کی حمایت لائبریری کو کسی بھی فارمیٹ کے لیے ایک آلمانیہ حل بناتی ہے۔
  • SDWebImageManager ہر کمپوننٹ کو کسٹمائیز کرنے کی صلاحیت کے ساتھ لوڈنگ کے لیے ایک متحد فیساڈ فراہم کرتا ہے۔
  • SwiftUI کے لیے WebImage تمام حالات کے انتظام کے ساتھ اعلانی انداز میں تصویریں لوڈ کرنے کی اجازت دیتا ہے۔
  • ٹرانسفارمیشن (حجم، گولائی، رنگ) && آپریٹر کا استعمال کرکے مشترک کی جاتی ہیں اور کیشنگ سے پہلے لاگو کی جاتی ہیں۔
  • Objective-C مطابقت Swift میں منتقل کیے بغیر SDWebImage کو لگیسی مناصب کے لیے قابل رسائی بناتی ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں