"Pigro" è utilizzato in due diversi contesti.
Il primo, quando criticare un disegno di classe, sostiene che una classe è inefficace - che non fa abbastanza per giustificare la sua esistenza. La gente chiama anche questo tipo di classe "sottile". Questo probabilmente non è quello che intendi qui.
secondo luogo, valutazione pigra e istanziazione pigrizia significa che la classe fa solo il lavoro di valutare una proprietà o inizializzazione stesso quando effettivamente necessario.
Ad esempio, supponiamo di avere una classe che crea un oggetto Impiegato.
@implementation Employee
- (id) initWithID: (IdentificationCode*) ident
{
self =[super init]
if (self) {
_records=[self retrieveEmployeeRecordsFor: ident];
_identification=ident;
}
return self;
}
Questo va bene, ma il recupero di tutti i record da un database potrebbe essere lento. E a volte non abbiamo bisogno di fare il lavoro. Per esempio:
- (BOOL) isFounder
{
if (indent.number<10) return YES;
return NO;
}
Se stiamo istanziare un impiegato semplicemente per scoprire se sono un fondatore, non abbiamo bisogno di guardare i loro record a tutti!
.....
if ([thisEmployee isFounder]) {
[self sendCandyTo: thisEmployee.identification];
}
D'altra parte, a volte abbiamo bisogno di loro:
- (NSArray*) payments
{
return [self.records retrievePayStubs];
}
Quindi, se stiamo costruendo un impiegato solo per chiamare isFounder
, sprechiamo una ricerca nel database. Ma non possiamo ignorarlo, perché payments
ne ha bisogno.
Quello che facciamo è prendere la ricerca del database dal costruttore e inserirla in un metodo load
.
- (void) load
{
if (records) return;
self.records=[self retrieveEmployeeRecordsFor: ident];
}
- (NSArray*) payments
{
[self load];
return [self.records retrievePayStubs];
}
Ora, vengono caricati solo i record dei dipendenti quando ne abbiamo effettivamente bisogno. Se sono già stati caricati, non eseguiamo alcun lavoro aggiuntivo (a parte una chiamata al metodo). Se non abbiamo mai bisogno dei registri di pagamento, allora non abbiamo affatto bisogno di fare il lavoro.
La classe funziona solo quando è necessario - e attende fino all'ultimo minuto per eseguire il lavoro. È "pigro!"
potrebbe essere una classe caricata da un plug-in. forse controlla la documentazione su plugins/dyld/codice caricato dinamicamente – nielsbot
Sei sicuro che significhi che la classe è pigra e non solo la lista? –
Sono d'accordo con @JoshCaswell, dato che più avanti nella fonte di runtime ci sono riferimenti al caricamento lento nelle classi. Quasi certamente si riferisce alla lista, piuttosto che una classe è "pigra". – lxt