Aplicación de iPhone: descartando el controller de vista modal no lo reparte

Tengo un UIViewController (llámalo NumberTwo) que presenté como un controller de vista modal de otro UIViewController (llámalo NumberOne). NumberTwo contiene un método touchesBegan que escucha toques, y también tiene un método de acelerómetro que escucha los cambios de orientación del dispositivo en la dirección x, y o z. NumberTwo tiene un button llamado "Listo" que, cuando se toca, se descarta como un controller de vista modal:

[self dismissModalViewControllerAnimated:NO]; 

Pero parece que todavía está escuchando toques, y todavía está escuchando las aceleraciones. ¿Cómo puedo liberar completamente NumberTwo cuando lo rechazo? Intenté agregar una llamada de lanzamiento de la siguiente manera:

 [self dismissModalViewControllerAnimated:NO]; [self release]; 

pero eso causó un EXEC_BAD_ACCESS.

¿Lanzó el controller después de presentarlo? Por ejemplo, en su método en NumberOneController que lo presenta, ¿tiene algo como:

 NumberTwoController * controller = [NumberTwoController alloc] init]; // do stuff to config controller [self presentModalViewController: controller]; [controller release]; 

A less que desee aferrarse a NumberTwoController para su reutilización, este sería el patrón habitual. El método presentModalViewController garantiza que el controller se retiene mientras está en uso. A continuación, debe ponerse en order cuando, dentro de NumberTwoController , llame [self dismissModalViewControllerAnimated: NO] .

Tuve un problema muy similar que me atormentó durante días. Resultó que mi class de controller de vista no estaba siendo desasignada cuando la descarté porque ese controller de vista tenía un NSTimer activo que no estaba siendo invalidado (detenido). Pude matar el timer en viewDidDisappear.

Asegúrate de liberar todo lo que uses cuando termines con él; El método dealloc solo se llama cuando el UIViewController y todas sus properties / objects ya no están en uso. Nunca use [self release]; debe liberarlo del controller de vista que lo creó después de que haya terminado con él.