"Lazy" wird in zwei verschiedenen Kontexten verwendet.
Die erste, wenn ein Klassenentwurf kritisiert wird, argumentiert, dass eine Klasse unwirksam ist - dass sie nicht genug tut, um ihre Existenz zu rechtfertigen. Die Leute nennen diese Art von Klasse auch "dünn". Das ist wahrscheinlich nicht das, was du hier meinst.
Zweitens lazy evaluation und faul Instanziierung bedeuten, dass die Klasse nicht nur die Arbeit der eine Eigenschaft Auswertung oder selbst zu initialisieren, wenn sie tatsächlich benötigt werden.
Angenommen, wir haben eine Klasse, die ein Employee-Objekt erstellt.
Das ist in Ordnung, aber das Abrufen aller Datensätze aus einer Datenbank ist möglicherweise langsam. Und manchmal müssen wir die Arbeit nicht machen. Zum Beispiel:
- (BOOL) isFounder
{
if (indent.number<10) return YES;
return NO;
}
Wenn wir einen Mitarbeiter einfach sind instanziieren, um herauszufinden, ob sie ein Gründer sind, wir tun müssen, um ihre Aufzeichnungen nicht sehen überhaupt nicht!
.....
if ([thisEmployee isFounder]) {
[self sendCandyTo: thisEmployee.identification];
}
Auf der anderen Seite, manchmal müssen wir sie:
- (NSArray*) payments
{
return [self.records retrievePayStubs];
}
Also, wenn wir nur ein Angestellter sind konstruieren isFounder
zu nennen, haben wir eine Datenbanksuche verschwenden. Aber wir können das nicht einfach überspringen, weil payments
es braucht.
Was wir tun, ist die Datenbank suchen aus dem Konstruktor und legte es in eine load
Methode.
- (void) load
{
if (records) return;
self.records=[self retrieveEmployeeRecordsFor: ident];
}
- (NSArray*) payments
{
[self load];
return [self.records retrievePayStubs];
}
Jetzt laden wir nur die Mitarbeiterdatensätze, wenn wir sie tatsächlich brauchen. Wenn sie bereits geladen wurden, führen wir (abgesehen von einem Methodenaufruf) keine zusätzliche Arbeit aus. Wenn wir die Zahlungsaufzeichnungen nie brauchen, müssen wir die Arbeit überhaupt nicht machen.
Die Klasse funktioniert nur, wenn sie muss - und wartet bis zur letzten Minute, um die Arbeit zu erledigen. Es ist "faul"!
könnte eine Klasse sein, die von einem Plugin geladen wurde. vielleicht überprüfen Sie die Dokumentation auf Plugins/dyld/dynamisch geladenen Code – nielsbot
Sind Sie sicher, dass es bedeutet, dass die Klasse faul ist und nicht nur die Liste? –
Ich stimme @JoshCaswell zu, da später in der Laufzeitquelle Verweise auf das Laden in den Klassen stehen. Es bezieht sich eher auf die Liste, als dass eine Klasse "faul" ist. – lxt