Почему это чрезмерное освобождение? UINavigationController/UITableview

Я нажимаю контроллер вида на свой стек навигационного контроллера из моего метода tableViewController didSelectRowAtIndexPath следующим образом:

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
MyObject *myO = (MyObject *)[appDelegate.myOs objectAtIndex:indexPath.row];
myViewController.amount = myO.amount;
[self.navigationController pushViewController:myViewController animated:YES];
[myViewController release];

Если я раскомментирую эту последнюю строку, приложение сбой при возврате с ошибкой:

-[CALayer release]: message sent to deallocated instance 0xd4f860

Копаясь немного дальше, я обнаружил, что крах может быть сужен до вызова [super dealoc] в методе DealView MyViewController. Разорушив "[super dealoc]", мы не рухнули.

У меня проблемы с этим. "super" - это класс UIViewController, и я не могу продолжить исследование этого метода dealoc... не так ли? Может быть, есть способ увидеть, что именно указывал 0xd4f860, но я не знаю, как это сделать? Любые идеи?

Ответ 1

Вы ищете не то место - проблема в том, что myViewController слишком часто освобождается (или автореализован).

Код, который вы опубликовали, выглядит корректно, поэтому я бы посмотрел на код MyViewController, чтобы узнать, выпускает ли он себя, или каким-то образом освобождает себя от других средств.

Вы также можете переопределить метод выпуска, установить точку прерывания и посмотреть, можете ли вы его сузить таким образом... например,

- (void)release {
    [super release]; //Set breakpoint here
}