2011-11-29 8 views
5

Gli strumenti (perdite) segnalano una perdita di memoria quando si utilizza TWRequest e non riesco a vedere realmente cosa sto facendo male.TWRequest sembra fuoriuscire quando utilizzato in progetti non ARC

Ecco i passaggi per riprodurre il problema:

Creare un nuovo progetto Xcode (ARC disabilitato), aggiungere il quadro Twitter e poi appena aggiunto le seguenti righe al codice (ad esempio in viewDidLoad):

TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"] parameters:nil requestMethod:TWRequestMethodGET]; 

[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
    NSLog(@"in performrequest"); 

    [postRequest release]; 
}]; 

Dopo profiling questo codice con gli strumenti (Perdite), mi sta dicendo che la linea con "performRequestWithHandler" perde:

Instruments screenshot

Marked line

Qualche idea su cosa fare per prevenire questa perdita?

Ho trovato una domanda simile here ma sembra essere estraneo al problema che sto descrivendo.

risposta

2

Non sono sicuro del motivo per cui gli strumenti lo individuano come una perdita ma è possibile rilasciare la richiesta al di fuori del blocco di completamento. Una volta che la richiesta è stata avviata, viene mantenuta dalla connessione fino all'esecuzione del blocco di completamento. Cambia il tuo codice in:

TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"] parameters:nil requestMethod:TWRequestMethodGET]; 

[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
    NSLog(@"in performrequest"); 
}]; 

[postRequest release]; 

Non sarei sorpreso se questo elimina anche la perdita.

Problemi correlati