2011-11-29 8 views
5

Instruments (Leaks) informa una pérdida de memoria cuando se utiliza TWRequest y realmente no puedo ver lo que estoy haciendo mal.TWRequest parece tener fugas cuando se usa en proyectos que no son ARC

Estos son los pasos para reproducir el problema:

Crear un nuevo proyecto de Xcode (ARC desactivado), añadir el Marco de Twitter y luego se agregó las siguientes líneas de código (por ejemplo, en 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]; 
}]; 

Después de perfilar este código con Instrumentos (fugas), me está diciendo que la línea con "performRequestWithHandler" tiene fugas:

Instruments screenshot

Marked line

¿Alguna idea de qué hacer para evitar esta fuga?

Encontré una pregunta similar here pero parece no estar relacionada con el problema que estoy describiendo.

Respuesta

2

No estoy seguro de por qué los instrumentos detectan esto como una fuga, pero puede liberar la solicitud fuera del bloque de finalización. Una vez que se inicia la solicitud, la conexión retiene hasta que se ejecuta el bloque de finalización. Cambie su código a:

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]; 

No me sorprendería si esto elimina la fuga también.

Cuestiones relacionadas