"आलसी" दो अलग-अलग संदर्भों में उपयोग किया जाता है।
पहला, जब एक वर्ग डिजाइन की आलोचना करते हैं, तो तर्क मिलता है कि एक वर्ग अप्रभावी है - यह अपने अस्तित्व को न्यायसंगत बनाने के लिए पर्याप्त नहीं करता है। लोग इस तरह के वर्ग को "पतले" कहते हैं। शायद यह आपके यहां क्या मतलब नहीं है।
दूसरा, आलसी मूल्यांकन और आलसी इन्स्टेन्शियशन मतलब है कि वर्ग केवल एक संपत्ति के मूल्यांकन या खुद आरंभ जब वास्तव में जरूरत का काम करता है।
उदाहरण के लिए, मान लें कि हमारे पास एक कक्षा है जो कर्मचारी वस्तु बनाती है।
@implementation Employee
- (id) initWithID: (IdentificationCode*) ident
{
self =[super init]
if (self) {
_records=[self retrieveEmployeeRecordsFor: ident];
_identification=ident;
}
return self;
}
यह ठीक है, लेकिन किसी डेटाबेस से सभी रिकॉर्ड को पुन: प्राप्त धीमी गति से हो सकता है। और कभी-कभी हमें काम करने की ज़रूरत नहीं होती है। उदाहरण के लिए:
- (BOOL) isFounder
{
if (indent.number<10) return YES;
return NO;
}
बस पता लगाने के लिए हम एक कर्मचारी instantiating कर रहे हैं अगर वे एक संस्थापक हैं, हम सब पर उनके रिकॉर्ड देखने की जरूरत नहीं है!
.....
if ([thisEmployee isFounder]) {
[self sendCandyTo: thisEmployee.identification];
}
दूसरी ओर, कभी कभी हम उन्हें जरूरत:
- (NSArray*) payments
{
return [self.records retrievePayStubs];
}
तो, अगर हम सिर्फ isFounder
कॉल करने के लिए एक कर्मचारी का निर्माण कर रहे हैं, हम एक डेटाबेस देखने बर्बाद। लेकिन हम इसे छोड़ नहीं सकते हैं, क्योंकि payments
इसकी आवश्यकता है।
हम जो करते हैं वह डेटाबेस निर्माता को कन्स्ट्रक्टर से बाहर ले जाता है और इसे load
विधि में डाल देता है।
- (void) load
{
if (records) return;
self.records=[self retrieveEmployeeRecordsFor: ident];
}
- (NSArray*) payments
{
[self load];
return [self.records retrievePayStubs];
}
अब, हम केवल कर्मचारियों के रिकॉर्ड लोड करते हैं जब हमें वास्तव में उनकी आवश्यकता होती है। अगर वे पहले ही लोड हो चुके हैं, तो हम कोई अतिरिक्त काम नहीं करते हैं (एक विधि कॉल से अलग)। अगर हमें भुगतान रिकॉर्ड की आवश्यकता नहीं है, तो हमें काम करने की ज़रूरत नहीं है।
कक्षा केवल तभी काम करती है जब वह काम करता है - और काम करने के लिए आखिरी मिनट तक इंतजार करता है। यह "आलसी है!"
प्लगइन से लोड की गई कक्षा हो सकती है। हो सकता है कि प्लगइन/डाइल्ड/गतिशील रूप से लोड किए गए कोड – nielsbot
पर प्रलेखन की जांच करें क्या आप वाकई इसका मतलब है कि कक्षा आलसी है न केवल सूची? –
मैं @ जोश कैसवेल के साथ समझौता कर रहा हूं, क्योंकि बाद में रनटाइम स्रोत में कक्षाओं में आलसी लोडिंग के संदर्भ हैं। यह वर्ग निश्चित रूप से 'आलसी' होने की बजाय सूची को संदर्भित करता है। – lxt