Domanda

Ho una classe che costruisce una richiesta sulla base di alcuni passato nelle variabili. La classe ha anche tutti i metodi delegato per ricevere i dati e lo memorizza in una proprietà per la classe chiamata per recuperare.

Quando la classe inizializza crea una connessione e poi si ritorna:

NSURLConnection *connection;
if (self = [super init]) {
    self.delegate = theDelegate;
    ...some code here...
    connection = [[NSURLConnection alloc] initWithRequest:theRequest  delegate:self  startImmediately:YES];
}
return self;

Quindi non riesco a rilasciarlo normalmente e se io AutoRelease si blocca. E 'il lavoro della classe chiamata a rilasciare? E se è così si limita a rilasciare l'oggetto initilised anche rilasciare connessione o avete di rilasciare in modo specifico? Se sì, come sarebbe?

Grazie

È stato utile?

Soluzione

Fai connection una variabile di istanza e rilasciarlo su richiesta. La domanda "chi" dovrebbe rilasciare l'oggetto dipende strettamente tuoi semantica degli oggetti e la gerarchia.

Altri suggerimenti

Perché si sta aprendo un NSURLConnection all'interno di un costruttore?

In genere, il costruttore non deve svolgere questo tipo di lavoro. Se la connessione è associato all'oggetto, vorrei fare connection una proprietà dell'oggetto e [connection release]; all'interno del metodo dealloc dell'oggetto.

Ricordate che non si deve mettere tutta la vostra fede in Clang. Esso può e deve segnalare falsi negativi e falsi positivi.

Clang sta migliorando ogni giorno, ma è ancora nella sua infanzia in questo momento. E 'fantastico che è integrato con Xcode così bene, ma basta tenere a mente che ha alcuni difetti.

In questo caso, dipende dalla portata della variabile si sta memorizzare l'oggetto di connessione. Se viene dichiarata come una variabile di istanza, allora dovrebbe essere ok, a patto che si rilascia in dealloc o in qualche altro punto in cui il gioco è fatto con esso.

Se, come hai postato nella sua interrogazione, la dichiarazione di connection è locale al metodo init, poi Clang è correttamente segnalando una perdita. Si dovrebbe fare connection una variabile di istanza o una proprietà e garantire lo si rilascia in dealloc o quando hai finito con esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top