UIWebView no está desasignando memoria

Tengo problemas reales para intentar recuperar la memoria que he asignado para unUIWebView dentro de mi aplicación Básicamente creo y presento elUIWebView temporalmente para el usuario en un separadoViewController, luego elimine todas las referencias y haga estallarViewController de la pila A pesar de hacer todo esto, la memoria asignada nunca se devuelve, y me quedo atascado con 10 Mb adicionales de memoriacada vez Yo sigo a esoViewController de nuevo.

Veamos cómo estoy manejando estoUIWebView de todos modos

Bueno, para empezar, tengo una referencia local en mi archivo de encabezado, mostrar aquí

#pragma mark UIWebView Properties
/// WebView for loading URL resources
@property (nonatomic, weak)UIWebView *webView;

Tenga en cuenta que no es unIBOutletEstoy creando estoUIWebView programáticamente en el siguiente método, disparado enViewDidAppear.

-(void)presentYoutubeVideoWithID:(NSString *)videoID {
    /* Setup UIWebView */
    UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    /* Set Delegate */
    [webView setDelegate:self];
    /* Set local property */
    [self setWebView:webView];
    /* Add view to ViewController */
    [self.view addSubview:webView];
    /* Set constraints */
    // Removed for simplicity 

    /* Set URL */
    NSString *youTubeVideoHTML = @"<!DOCTYPE html> (Removed) </html>";
    NSString *html = [NSString stringWithFormat:youTubeVideoHTML, self.view.frame.size.width, self.view.frame.size.height, videoID];
    [webView loadHTMLString:html baseURL:[[NSBundle mainBundle]resourceURL]];

    /* Setup Notification */
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(handleWhenDoneButtonClick:)
                                                 name:UIWindowDidBecomeHiddenNotification
                                               object:nil];
}

Y finalmente, limpio y "reviento" elUIViewController:

-(void)handleWhenDoneButtonClick:(NSNotification *)notification {
    /* Remove Observer */
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIWindowDidBecomeHiddenNotification object:self.view.window];
    /* Remove UIWebView from hierarchy */
    [self.webView removeFromSuperview];
    /* Remove self from webView delegate */
    [self.webView setDelegate:nil];
    /* Remove reference because I can */
    [self setWebView:nil];
    /* Dismiss ViewController */
    [self dismissViewControllerAnimated:YES completion:nil];
}

Para un escenario bastante simple, nada parece eliminar realmente la memoria ocupada por UIWebView. Como puede ver aquí, el uso de memoria nunca disminuye:

Antes de cargar UIWebView:

Una vez que el UIWebView está abierto:

Después de abrir el ViewController y eliminar las referencias a UIWebView:

La cantidad de memoria utilizada aquí persiste indefinidamente por lo que puedo decir. Después de cinco minutos, todavía tendrá más de 34 Mb asignados. Si abro elViewController nuevamente, asignará más, y terminaré con unos 40 Mb de uso "base" una vez que vuelva a aparecer.

Fugas: No estando completamente disuadido, inicialmente fui a buscar fugas, pensando que había cometido algún error en alguna parte. Sin embargo, aunque en realidad encontré algunos muypequeña fugas, aparentemente estaban completamente relacionadas conUIWebView.

Otros casos sobre S.O: He estado buscando bastante tiempo una solución para esto en la web, pero el único hilo realmente relevante que he encontrado es uno del año pasado como se ve aquí:UIWebView toma mucha memoria

Todavía no tiene una respuesta, y eso probablemente se deba a que (como la mayoría de las otras preguntas relacionadas con este tema), muchas de las respuestas brindan consejos genéricos / conflictivos. como sugerirle que use ARC (¿Quién no?) o informarle a OP que no deben mantener referencias fuertes (incluso cuando no lo están, y el código lo demuestra). Finalmente, algunas respuestas solo afirman que la administración de memoria no es un problema para empezar porque hay suficiente para todos, y esas tampoco son respuestas útiles.

De todos modos, este es el problema actual que estoy enfrentando. Gracias por tomarse el tiempo de leer esto (¡si lo hizo!).

Respuestas a la pregunta(1)

Su respuesta a la pregunta