релиз после iPhone навигационный контроллер pushViewController - PullRequest
1 голос
/ 25 августа 2011

Я очень запутался в следующем коде:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{    
RPSAdvisorViewController *pushThis = [[RPSAdvisorViewController alloc]init];
pushThis.opponentName = [opponentArray objectAtIndex:indexPath.row];
[self.navigationController pushViewController:pushThis animated:YES];
//[pushThis release];
}

Если строка [pushThis release] не закомментирована, приложение вылетит, когда я вернусь из этого представления.Я думал, что всегда должен выпускать выделенные мной viewControllers, но на этот раз приложение не позволит мне.

Я даже пытался проверить утечки в таких инструментах, не выпуская pushThis, утечек нет.

Я действительно смущен, может кто-нибудь сказать мне, почему я не собираюсь выпускать pushThis?

Edit1: сбой выдаст следующее сообщение об ошибке:

- [CALayer release]: сообщение отправлено на освобожденный экземпляр 0x4e66b20

Похоже, что, когда navigationController открывает контроллер представления, он пытается снова отправить выпуск в pushThis, который уже был освобожден.Если я не выпускаю, все работает отлично, инструменты не показывают никаких утечек, даже если я многократно нажимаю и выскакиваю контроллер представления.

Ответы [ 2 ]

0 голосов
/ 25 августа 2011

Я могу только догадываться, что есть какая-то проблема с RPSAdvisorViewController.Можете ли вы попробовать заменить его заполнителем UIViewController и посмотреть, что произойдет?

0 голосов
/ 25 августа 2011

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

Я думаю, что может быть проблема с иерархией представлений в вашем приложении. Можете ли вы это проверить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...