Riassunto della mia domanda: NSURLConnection conserva il proprio delegato?Un NSURLConnection mantiene il proprio delegato?
domanda dettagliata scenario:
ho una classe personalizzata, denominata JsonDownloader che si prende in un URL e restituisce un NSDictionary del JSON che i rendimenti URL.
Su un'app per iPhone, faccio qualcosa del genere. (Il metodo init prende il via l'intero processo)
- (void)viewDidLoad {
JsonDownloder *temp = [[[JsonDownloader alloc] initWithURL:urlString returnDataTo:self]];
[temp release];
[super viewDidLoad];
}
Quando il JsonDownloader è fatto il download e l'analisi, si esegue un callback per l'returnDataTo: oggetto, in questo caso, l'oggetto chiamante.
Questo funziona bene. Anche se introduco un ritardo di 30 secondi nella risposta del mio server web, JsonDownloader esiste ancora ed è correttamente richiamato.
Quindi le mie domande sono le seguenti: Che cosa impedisce a JsonDownloader di superare la fine del ciclo degli eventi? Lo sto esplicitamente rilasciando.
La mia impressione è che NSURLConnection deve fare un fermo sul suo delegato, ma non ho visto nulla nella documentazione. Qualcuno ha un'idea?
Ottima domanda e ottima risposta. Anch'io stavo lottando con questo, ma ho deciso di aggiungere [self release] subito dopo che il delegato ha assegnato il pareggio. Dal momento che il sé è delegato nella mia classe, non ho visto alcun motivo per aumentare il numero di ritenzione. Se ciò non è corretto, qualcuno me lo faccia sapere. – jocull
Voglio solo aggiungere - grazie. Il Mancante Manuale, parte 327. E 'mendicante credenza che questo tipo di fatto importante non sia menzionato nella documentazione di Apple. Ho pensato che lo stesse conservando, ma non ero sicuro, i doc non ne hanno parlato, e in molti se non molti casi in cui i delegati in framework Cocoa sono * non * mantenuti. Questa è l'eccezione. – n13