Почему это чрезмерное освобождение? 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
}