2010-07-27 14 views
6

Tengo un controlador de vista que muestra UITextField. Aquí les traigo tecladoFuga de memoria en el teclado descartar

- (void)viewDidAppear:(BOOL)animated 
{ 
    [wordTextField becomeFirstResponder]; 
} 

Entonces tengo botón que se desestima el teclado sin cerrar propio controlador:

- (void)cancel:(id)sender 
{ 
    if([wordTextField isFirstResponder]) 
    { 
     [wordTextField resignFirstResponder]; 
    } 

} 

Después de esto Instrumentos me va a mostrar una fuga en

# Category Event Type Timestamp RefCt Address Size Responsible Library Responsible Caller 
0 Malloc 128 Bytes Malloc 00:11.239 1 0x3b82550 128 UIKit UIKeyboardInputManagerClassForInputMode 

En algún lugar de la pila [wordTextField resignFirstResponder] mencionada.

Incluso si no traigo el teclado yo mismo y dejo que el usuario lo active, sigo teniendo una fuga. En este caso, no hay nada de mi código mencionado en la pila.

+0

Solo para prueba He creado un nuevo proyecto basado en vistas con solo 'UITextField', nada más. Tocar en el campo de texto mostrará kbd y provocará una pérdida de memoria mencionada anteriormente. Estoy usando Instruments 2.1 y Xcode 3.2.2. ¿Debería ignorar esta fuga? – Pablo

+0

simulador o dispositivo? Si es el dispositivo, publique un proyecto de muestra, tenga curiosidad por ver esto. –

+0

Es simulador, pero sigue interesado en asegurarse. Verificará en el dispositivo más tarde hoy. Junto con este en mi proyecto original tengo 2 'open_handle_to_dylib_path', que por lo que entiendo de Google podría ser falsa alarma con el simulador. Pero no pude encontrar nada sobre 'UIKeyboardInputManagerClassForInputMode' por lo que podría ser algo serio. – Pablo

Respuesta

7

El instrumento Leaks muestra la memoria que no se va a liberar en el curso normal de la aplicación (porque no hay ninguna referencia). Esto en sí mismo no es un problema, se liberará cuando la aplicación salga. Gran parte del código del marco asignará y dejará estos fragmentos muy pequeños de memoria asignados. No tengo idea si son errores o son esenciales para la ejecución de la aplicación. Lo que sea, debemos aceptar que son completamente normales.

Las fugas identifican estos trozos de memoria como 'Fugas' y eso suena mal, pero este no es realmente el 'Fugas' que el instrumento está ahí para ayudarte a identificar.

Las fugas 'reales' están en el código que se puede ejecutar muchas veces y que asignan algo de memoria que nunca se libera, por lo que con el tiempo consumirá más y más memoria hasta que se use toda la memoria y se bloqueará.

Así que si tiene una aplicación que no importa por cuanto tiempo la use o sin importar cómo la use, 'gotea' 128 bytes en un marco de Apple por lo general no tiene que preocuparse.

Sin embargo, si tiene una aplicación que dice, cada vez que hace clic en un botón asigna una nueva cadena que nunca se lanza, sin importar cuántos bytes tenga la cadena, si el usuario presiona el botón las veces que esto consuma toda la memoria disponible para la aplicación y, finalmente, bloquearla. Este es el tipo de fuga que necesita tener en cuenta.

El instrumento de fugas de manera realista no puede distinguir entre los dos tipos, pero debe ser capaz de hacerlo. Es posible que desee un tipo de objeto singleton, por ejemplo, que solo haya una instancia de, y que deba existir durante toda la vida de su aplicación. Usted crea el objeto en el inicio de la aplicación y, de manera realista, nunca necesita liberar este objeto, se puede matar cuando se cierra la aplicación. Leaks lo señalará como una fuga, y algunos otros desarrolladores con los que trabajas, que suponen que esto significa que no sabes lo que estás haciendo, correrán hacia tu jefe como un niño pequeño y dirán: "Está escribiendo un código realmente defectuoso, y eso es reeeeally malo ". Y su jefe, que no es un programador, lo tomará en serio porque suena mal y, de todos modos, obtuvo un 2.2 en CS de una universidad acreditada, así que debe saber de lo que está hablando. Cuando realmente es completamente razonable y exactamente lo que pretendías hacer.

Por lo tanto, utilice el instrumento Leaks para encontrar errores en su código que arruinarán su aplicación. No se preocupe por cada byte encontrado 'Fugas' en un marco de Apple.

+0

@iPhoneDev: Gracias. Por cierto, en el dispositivo no se produjo tal fuga en Instruments. – Pablo