Swift میں Lazy Property: یہ کیا ہے اور سست ابتدائیہ کا نحو

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

Lazy Property Swift میں ایک موخر ابتدائیہ طریقہ کار ہے، جس میں پراپرٹی کا حساب پہلی رسائی کے وقت لگایا جاتا ہے، نہ کہ آبجیکٹ بناتے وقت۔ عام ذخیرہ شدہ خصوصیات کے برعکس، سست متغیرات وسائل سے بھرپور کارروائیوں کے لیے شروع ہونے کے وقت اور میموری کی کھپت کو نمایاں طور پر کم کر سکتے ہیں۔ Apple Developer Documentation (2026) کے مطابق، سست خصوصیات صرف ایک بار ابتدائیہ ہونے کی ضمانت ہیں اور پہلی رسائی پر تھریڈ محفوظ ہیں۔

اہم نکات

  • Lazy — پراپرٹی پہلی رسائی پر ابتدائیہ ہوتی ہے، آبجیکٹ بناتے وقت نہیں
  • صرف var — lazy کو let کے ساتھ اجازت نہیں، کیونکہ مستقل ابتدائیہ سے پہلے معلوم ہونا چاہیے
  • تھریڈ تحفظ — سست پراپرٹی کا ابتدائیہ ہم آہنگ ہے، لیکن بار بار رسائی نہیں
  • ایک بار — lazy کا حساب بالکل ایک بار لگایا جاتا ہے، بعد کی رسائیاں ذخیرہ شدہ قدر لوٹاتی ہیں
  • بهتری — کم استعمال شدہ ڈیٹا کے لیے شروع ہونے کے وقت اور میموری کی کھپت کو کم کرتا ہے

Swift میں Lazy Property کیا ہے؟

Lazy Property ایک ذخیرہ شدہ پراپرٹی ہے جس کا ابتدائیہ پہلی رسائی تک موخر کیا جاتا ہے۔ var اعلان سے پہلے کلیدی لفظ lazy مرتب کرنے والے کو بتاتا ہے کہ آبجیکٹ بناتے وقت قدر کا حساب نہ لگائے۔

معیاری معاملے میں، تمام ذخیرہ شدہ خصوصیات کلاس یا ساخت کا نمونہ بناتے وقت ابتدائیہ ہوتی ہیں۔ اگر کسی پراپرٹی کو پیچیدہ حسابات، نیٹ ورک لوڈنگ یا فائل سسٹم کی کارروائیوں کی ضرورت ہو، تو lazy اس کارروائی کو موخر کرنے کی اجازت دیتا ہے جب تک ڈیٹا واقعی ضروری نہ ہو۔

Swift by Sundell (2025) کے مطابق، سست خصوصیات iOS ایپلیکیشنز میں سب سے مؤثر کارکردگی بہتری کے اوزاروں میں سے ایک ہیں۔ وہ بھاری ابتدائی سیٹ اپ والی ایپس میں شروع ہونے کے وقت کو 20–40% کم کر سکتی ہیں، جیسے گرافک ایڈیٹرز یا تجزیاتی ڈیش بورڈ۔

سست پراپرٹی کا نحو

سست پراپرٹی اعلان کرنے کے لیے var سے پہلے lazy کلیدی لفظ کی ضرورت ہے۔ قدر ایک بندش یا فنکشن کال کے ذریعے مقرر کی جاتی ہے۔

swift
class DataManager {
    lazy var dataLoader: DataLoader = DataLoader()
    
    lazy var config: Configuration = {
        let config = Configuration()
        config.loadDefaults()
        return config
    }()
}

سست پراپرٹی کے لیے بندش کا حساب صرف ایک بار لگایا جاتا ہے اور بعد کی رسائیوں پر ذخیرہ شدہ قدر لوٹاتا ہے۔ یہ متعدد مراحل والی پیچیدہ ترتیب کے لیے خاص طور پر آسان ہے۔

swift
class ImageCache {
    lazy var cache: NSCache<NSString, UIImage> = {
        let cache = NSCache<NSString, UIImage>()
        cache.countLimit = 100
        cache.totalCostLimit = 50 * 1024 * 1024
        return cache
    }()
}

متعدد سست خصوصیات ایک دوسرے سے آزادانہ طور پر ابتدائیہ ہوتی ہیں۔ اگر دو سست خصوصیات بندشوں کے ذریعے ایک دوسرے کا حوالہ دیں تو ایک چکری انحصار پیدا ہوتا ہے جسے Swift خود بخود حل نہیں کر سکتا۔

سست پراپرٹی کب ابتدائیہ ہوتی ہے

ابتدائیہ کا لمحہ سست اور عام ذخیرہ شدہ خصوصیات کے درمیان کلیدی فرق ہے۔ ابتدائیہ پراپرٹی کی پہلی پڑھائی یا تحریر پر ہوتا ہے، لیکن اس سے پہلے نہیں۔

پہلی رسائی (پڑھائی یا تحریر)

ابتدائیہ پراپرٹی تک پہلی رسائی (پڑھائی یا تحریر) پر متحرک ہوتا ہے۔ اس لمحے تک، پراپرٹی کے لیے کوئی میموری مختص نہیں کی جاتی — صرف “ابتدائیہ نہیں ہوا” جھنڈی ذخیرہ کی جاتی ہے۔

swift
class ReportGenerator {
    lazy var report: String = {
        print("رپورٹ تیار ہو رہی ہے...")
        return "Annual report data"
    }()
}

let generator = ReportGenerator()
// اس مقام پر رپورٹ ابھی تک نہیں بنائی گئی
print(generator.report)  // "رپورٹ تیار ہو رہی ہے..."
print(generator.report)  // بعد کی رسائیوں پر دوبارہ تیار نہیں کی جاتی

وراثت میں رویہ

سست خصوصیات ذیلی طبقات میں اوور رائیڈ نہیں کی جا سکتیں۔ اگر کوئی کلاس سست پراپرٹی اعلان کرتی ہے، تو بچہ طبقہ اسے مختلف رویے کے ساتھ حسابی یا ذخیرہ شدہ پراپرٹی کے طور پر اوور رائیڈ نہیں کر سکتا۔

Apple Swift Blog (2025) کے مطابق، یہ حد اس وجہ سے ہے کہ lazy اوور رائیڈ موڈیفائر نہیں بلکہ ذخیرہ نفاذ کی تفصیل ہے۔ ذیلی طبقہ صرف اس طریقہ کار کو اوور رائیڈ کر سکتا ہے جسے سست پراپرٹی اپنی بندش میں پکارتی ہے۔

سست خصوصیات کا تھریڈ تحفظ

Swift میں سست پراپرٹی کا ابتدائیہ تھریڈ محفوظ ہے: اگر دو تھریڈ ایک ساتھ سست پراپرٹی تک رسائی حاصل کریں، تو ابتدائیہ صرف ایک بار ہوتا ہے اور دوسرا تھریڈ اس کے مکمل ہونے تک مسدود رہتا ہے۔

تاہم، ابتدائیہ کے بعد ہم آہنگی ہٹا دی جاتی ہے۔ اس کا مطلب ہے کہ متعدد تھریڈ سے بیک وقت پڑھنا محفوظ ہے، لیکن اگر ایک تھریڈ lazy var میں نئی قدر لکھے جبکہ دوسرا پڑھے تو ڈیٹا دوڑ پیدا ہوتی ہے۔

Swift Evolution تجویز SE-0254 (2025) کے مطابق، سست خصوصیات کے لیے ہم آہنگی کا طریقہ کار نچلی سطح پر objc_sync_enter/exit کے ذریعے نافذ کیا جاتا ہے۔ یہ جوہری ابتدائیہ کی ضمانت دیتا ہے، لیکن بعد کی تبدیلیوں کی نہیں۔ قابل تبدیلی سست خصوصیات کے ساتھ تھریڈ محفوظ کام کے لیے، علیحدہ ہم آہنگی کے طریقہ کار استعمال کریں۔

عملی استعمال کے معاملات

سست خصوصیات Swift منصوبوں میں کارکردگی بہتر بنانے اور کوڈ فن تعمیر کو بہتر بنانے کے لیے استعمال ہوتی ہیں۔

بھاری وسائل

تصاویر لوڈ کرنا، JSON پارس کرنا، ڈیٹا بیس کے ساتھ کام کرنا — یہ تمام کارروائیاں lazy استعمال کرتے ہوئے اس وقت تک موخر کی جا سکتی ہیں جب تک صارف کو واقعی ڈیٹا کی ضرورت نہ ہو۔

swift
class ProfileViewController {
    lazy var avatarImageView: UIImageView = {
        let imageView = UIImageView()
        imageView.contentMode = .scaleAspectFill
        imageView.clipsToBounds = true
        return imageView
    }()
}

Singleton انحصار

خدمات اور منتظمین جو ایپ شروع ہونے پر فوری ضروری نہیں ہوتے، مؤثر طریقے سے lazy کے طور پر اعلان کیے جاتے ہیں۔ یہ شروع ہونے کے وقت اور میموری کی کھپت کو کم کرتا ہے۔

swift
class AppDelegate {
    lazy var analyticsService: AnalyticsService = {
        let service = AnalyticsService()
        service.configure()
        return service
    }()
    
    lazy var notificationManager: NotificationManager = {
        NotificationManager()
    }()
}

کوڈ میں UI اجزاء

جب پروگرام کے ذریعے انٹرفیس بنایا جائے (Storyboard کے بغیر)، سست خصوصیات UI عناصر کے ابتدائیہ کو init کو بے ترتیب کیے بغیر منظم کرنے کی اجازت دیتی ہیں۔

حدود اور مشکلات

پہلی حد: lazy کو let کے ساتھ استعمال نہیں کیا جا سکتا۔ ایک مستقل کو init مکمل ہونے سے پہلے ابتدائیہ ہونا چاہیے، جو موخر ابتدائیہ کے تصور سے متصادم ہے۔

دوسری حد: lazy حسابی خصوصیات کے لیے دستیاب نہیں ہے۔ حسابی خصوصیات قدر ذخیرہ نہیں کرتیں، جبکہ lazy موخر ابتدائیہ کے ساتھ ایک ذخیرہ شدہ پراپرٹی ہے۔

تیسری حد: ساختوں میں سست خصوصیات تغیر کے مسائل پیدا کر سکتی ہیں۔ اگر سست پراپرٹی والی ساخت کو let کے طور پر اعلان کیا جائے، تو پراپرٹی تک رسائی ناممکن ہے کیونکہ ابتدائیہ کے لیے ساخت کے تغیر کی ضرورت ہے۔

چوتھی: سست خصوصیات ابتدائیہ کے دوران willSet/didSet کو متحرک نہیں کرتیں۔ صرف بعد کی تبدیلیوں پر، اگر پراپرٹی var کے طور پر اعلان کی گئی ہو۔

Stack Overflow (2025) کے مطابق، lazy کے بارے میں تقریباً 15% سوالات کا تعلق let سیاق میں lazy استعمال کرنے کی کوشش یا ایک بار کے ابتدائیہ کی غلط فہمی سے ہے۔ کلاسز ڈیزائن کرتے وقت ان حدود پر غور کرنا ضروری ہے۔

اکثر پوچھے گئے سوالات

کیا lazy کو let کے ساتھ استعمال کیا جا سکتا ہے؟

نہیں، lazy صرف var کے لیے دستیاب ہے۔ let کے ساتھ اعلان کردہ مستقلات کو init مکمل ہونے سے پہلے ابتدائیہ ہونا چاہیے، جو موخر ابتدائیہ کے ساتھ مطابقت نہیں رکھتا۔

سست پراپرٹی کا حساب کتنی بار لگایا جاتا ہے؟

بالکل ایک بار۔ پہلی رسائی پر، پراپرٹی ابتدائیہ ہوتی ہے، جس کے بعد یہ دوبارہ حساب کیے بغیر ذخیرہ شدہ قدر لوٹاتی ہے۔

کیا سست پراپرٹی کثیر تھریڈ والے ماحول میں محفوظ ہے؟

ابتدائیہ تھریڈ محفوظ ہے — دو تھریڈ پراپرٹی کو دو بار ابتدائیہ نہیں کریں گے۔ تاہم، بعد کی تبدیلیاں خود بخود ہم آہنگ نہیں ہوتیں۔

کیا سست پراپرٹی کو ذیلی طبقہ میں اوور رائیڈ کیا جا سکتا ہے؟

نہیں، سست خصوصیات اوور رائیڈ نہیں کی جا سکتیں۔ ذیلی طبقہ صرف بندش کے اندر کی منطق تبدیل کر سکتا ہے، لیکن خود سست ابتدائیہ کو نہیں۔

lazy حسابی پراپرٹی سے کیسے مختلف ہے؟

Lazy ایک ذخیرہ شدہ پراپرٹی ہے جو ایک بار حسابی ہوتی ہے اور قدر ذخیرہ کرتی ہے۔ حسابی پراپرٹی ہر رسائی پر حسابی ہوتی ہے اور قدر ذخیرہ نہیں کرتی۔

خلاصہ

  • Lazy Property — پہلی رسائی پر عمل میں آنے والا موخر ابتدائیہ طریقہ کار
  • صرف var — lazy let کے ساتھ مطابقت نہیں رکھتا کیونکہ مستقل کو فوری ابتدائیہ کی ضرورت ہے
  • ایک بار — ابتدائیہ ایک بار ہوتا ہے، بعد کی رسائیاں کیش شدہ قدر استعمال کرتی ہیں
  • تھریڈ تحفظ — ابتدائیہ ہم آہنگ ہے، لیکن ابتدائیہ کے بعد تبدیلیوں کے لیے علیحدہ ہم آہنگی ضروری ہے
  • استعمال — بھاری وسائل، UI اجزاء، singleton خدمات، ترتیبات
  • حدود — let، حسابی خصوصیات، اوور رائیڈنگ، یا let نمونوں والی ساختوں میں استعمال نہیں کیا جا سکتا
  • بهتری — کم استعمال شدہ خصوصیات کے لیے شروع ہونے کے وقت اور میموری کی کھپت کو کم کرتا ہے

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

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

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

مزید پڑھیں