Estoy trabajando en un proyecto en iPhone. Ahora estoy iniciando un nuevo UIViewController desde otro UIViewController, y luego cambio entre ellos. Aquí está mi código.Objeto probablemente fue modificado después de ser liberado
iGreenAppDelegate *delegate = [UIApplication sharedApplication].delegate;
if(checkInViewController) {
[checkInViewController release];
checkInViewController = nil;
}
checkInViewController = [[CheckInViewController alloc] initWithCheckpoint:checkpoint];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.8];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:[delegate window] cache:YES];
[[delegate rootTabBarController].view removeFromSuperview];
[[delegate window] addSubview:checkInViewController.view];
[UIView commitAnimations];
El problema es la segunda vez que inicio la UIViewController, quiero soltarlo para evitar causar pérdida de memoria. El depurador muestra
iGreen malloc (916,0x3f60348c): error para el objeto 0x130350: Suma de comprobación incorrecta para objeto liberado - objeto probablemente se modificó después de ser liberado. establecer un punto de interrupción en malloc_error_break para depurar
Esto es extraño porque los códigos similares en otras partes no devuelven dicho error. Además, probé la liberación automática, pero el programa se bloqueará inmediatamente y el depurador dice que estoy modificando las capas finalizadas.
He estado trabajando en el problema durante toda una noche, y todavía estoy confundido al respecto.
Por cierto, si no me libero al viewcontroller, el programa funciona bien, pero no creo que sea una buena manera de solucionarla. ¿Alguien me puede ayudar a encontrar el problema? – Stone
Es difícil seguir lo que está sucediendo en su código solo con este fragmento, pero generalmente solo necesita asignar el controlador de vista, agregarlo a su controlador tabbar y luego liberar el controlador de vista. El controlador tabbar retiene el controlador de vista por lo que se mantendrá. Me parece que lo estás liberando antes de que el controlador tabbar termine con él. ¿Tal vez puedas agregar más código a esta pregunta para mayor claridad? –
puede agregar su implementación initWithCheckpoint? Además, ¿ha intentado construir y analizar en Xcode Menu? – AmineG