Mi interessa capire le circostanze che portano uno sviluppatore a sovrascrivere + inizializzare o + caricare. La documentazione rende chiaro che questi metodi sono chiamati per te dal runtime Objective-C, ma questo è davvero tutto ciò che è chiaro dalla documentazione di quei metodi. :-)
La mia curiosità deriva dall'osservare il codice di esempio di Apple: MVCNetworking. La loro classe modello ha un +(void) applicationStartup
metodo. Fa un po 'di pulizia sul filesystem, legge NSDefaults, ecc. Ecc ... e, dopo aver provato a raggruppare i metodi di classe di NSObject, sembra che questo lavoro di pulizie potrebbe essere ok per + load.
Ho modificato il progetto MVCNetworking, rimuovendo la chiamata in App Delegate a + applicationStartup e inserendo i bit di pulizia in + load ... il mio computer non ha preso fuoco, ma ciò non significa che sia corretto! Spero di ottenere una comprensione di eventuali sottigliezze, trucchi e quant'altro attorno a un metodo di configurazione personalizzato che devi chiamare rispetto a + load o + inizializzazione.
Per + caricare la documentazione dice:
Il messaggio di caricamento viene inviato a classi e categorie che sono sia caricate dinamicamente che collegate staticamente, ma solo se la classe o la categoria appena caricata implementa un metodo in grado di rispondere.
Questa frase è complicata e difficile da analizzare se non conosci il significato preciso di tutte le parole. Aiuto!
Cosa si intende per "sia caricato dinamicamente che collegato staticamente?" Qualcosa può essere caricato dinamicamente E collegato staticamente, o si escludono a vicenda?
"... la classe o la categoria appena caricata implementa un metodo che può rispondere" Quale metodo? Rispondi come?
Per quanto riguarda + initialize, la documentazione dice:
inizializzare viene invocato solo una volta per classe. Se si desidera eseguire un'inizializzazione indipendente per la classe e per le categorie della classe, è necessario implementare i metodi di caricamento.
Immagino che questo significhi, "se stai cercando di impostare la classe ... non usare inizializza". Ok bene. Quando o perché dovrei sovrascrivere l'inizializzazione allora?
+load
viene inviato separatamente per le categorie; cioè, ogni categoria di una classe può contenere il proprio+load
metodo.