¿Por qué no se llama a dealloc cuando ARC está activado para el proyecto pero desactivado para un objetivo de archivo particular c? [cerrado]

Uno de mis controladores de vista tiene ARC desactivado, pero cuando navego al controlador de vista anterior, no se llama a mi método dealloc.

Para el controlador de vista push que usé

Magazine_ArticleViewController_iPhone *viewController = [[Magazine_ArticleViewController_iPhone alloc] 
                                                         initWithNibName:@"Magazine_ArticleViewController_iPhone" 
                                                         bundle:[NSBundle mainBundle]];

viewController.hidesBottomBarWhenPushed = YES;

IssueDataHolder *dataHolder = [m_arrIssueData objectAtIndex:m_nCurrentIssueIndex];

NSLog(@"%d",dataHolder.nIssueID);

[viewController setM_IssueDataHolder:dataHolder];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release]; 

y para navegar el controlador de vista anterior que usé

[self.navigationController popViewControllerAnimated:YES];

preguntado el 02 de julio de 12 a las 10:07

por favor vea la pregunta actualizada ahora? -

algo tiene una fuerte referencia a su controlador de vista. -

puede que en clases anteriores ARC esté activado, por lo que mientras pushViewContrioller no estamos liberando la memoria del objeto del controlador de vista insertado, puede ser por eso que en ViewControllers insertados no se llama a dealloc -

no eso no es. algo tiene una fuerte referencia a su controlador de vista. -

Paul tiene razón, que su problema, sin duda, se basa en el hecho de que algo tiene una fuerte referencia a su controlador de vista. Y el problema probablemente no esté relacionado con ARC v non-ARC. yo lo he visto con descuido NSTimer código, pero muchas cosas pueden hacer que su controlador sea retenido. Puede comenzar buscando situaciones en las que su controlador de vista no desasignado pueda estar pasando una referencia a sí mismo (self) a otros métodos. Solo publica cualquier sospechoso Magazine_ArticleViewController_iPhone código. -

2 Respuestas

Para los desarrolladores que todavía tienen un problema, dealloc no se llama y no pueden encontrar el motivo: según la respuesta de Paul [performSelector:withObject:afterDelay:] puede ser la razón de este problema. tienes que cancelar [performSelector:] antes de presionar el nuevo ViewController.

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(Method) object:nil];

Respondido el 01 de junio de 13 a las 10:06

¿Es eso solo si el envío del selector aún no se ha ejecutado? - Día de nathan

Creo que sí, si hay un método, que se ejecutará con el selector después de un cierto retraso y otro ViewController empujado antes de este método, no se llama a dealloc. - hundimiento

Mi dealloc de Magazine_ArticleViewController_iPhone viewcontroller no fue llamado porque en un viewcontroller (en el que estoy presionando Magazine_ArticleViewController_iPhone viewcontroller) tomé un delegado con propiedad de retención. cuando lo hice @"asignar" entonces dealloc está siendo despedido.

Estoy completamente de acuerdo con @ Pablo de Lange comentario de.

cambió la propiedad de retención del delegado para asignar.

Respondido el 02 de junio de 13 a las 08:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.