he configurado un nsurl que toma los datos de http. cuando ejecuto el instrumento, dice que tengo un objeto NSFNetwork de fuga.NSURLConnection leak?
y cómo se libera theConnection en (vacío) ButtonClicked? o será lanzado más tarde?
- (void)ButtonClicked {
NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:KmlUrl]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:20.0f];
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
// receivedData is declared as a method instance elsewhere
NSMutableData *receivedData = [[NSMutableData data] retain];
[self setKMLdata:receivedData];
} else {
// inform the user that the download could not be made
}
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// append the new data to the receivedData
// receivedData is declared as a method instance elsewhere
[KMLdata appendData:data];
NSLog(@"didReceiveData");
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
// release the connection, and the data object
[connection release];
[KMLdata release];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
// release the connection, and the data object
[connection release];
// receivedData is declared as a method instance elsewhere
[KMLdata release];
}
Mientras autorelease llamando va a funcionar, se producirá un error en los casos en que el delegado se libera antes de que la conexión se libera. La mejor manera sería asignar la conexión a una variable de instancia y liberar + nil cuando no sea necesario. Si la conexión ivar todavía se asigna cuando el objeto se distribuye, el delegado debe establecerse en cero antes de liberar la conexión. – rpetrich
@rpetrich Estoy de acuerdo con que su sugerencia es más exhaustiva, sin embargo, estaba claro que su pregunta mostraba un malentendido básico de la administración de memoria en el iPhone y por eso quería darle una solución conceptual más fácil – h4xxr
@rpetrich, ¿puede proporcionar un ejemplo de código? Intenté resolver este problema de muchas maneras y todavía tengo una filtración. – Jordan