Вызывается ли метод dealloc в presentModalViewController при отклонении контроллера - PullRequest
1 голос
/ 25 марта 2010

здесь следующий код используется для просмотра текущего контроллера модального вида.

[[self navigationController] presentModalViewController:doctorListViewNavigationController animated:YES];

действие закрытия в следующем контроллере представления (DoctorListViewController). Вы можете понять, увидев следующий код, который я добавил, теперь ясно.

-(void)doctorsListAction
{
    if(isFirst == YES)
    {
      [self getDoctorsListController];
      [[self navigationController] presentModalViewController:doctorListViewNavigationController animated:YES];

    }
}

-(void)getDoctorsListController
{
    DoctorListViewController *doctorListViewController=[[DoctorListViewController alloc]init];
    doctorListViewController.doctorList=doctorList;
    doctorListViewNavigationController=[[UINavigationController alloc]initWithRootViewController:doctorListViewController];
    doctorListViewNavigationController.navigationBar.barStyle=  UIBarStyleBlackOpaque;
    [doctorListViewController release];

//code in next DoctorListViewContrller to dismiss the view.
//code for dismiss the ModalViewController.
-(void)closeAction
{
    [[self navigationController] dismissModalViewControllerAnimated:YES];
}

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

- (void)dealloc 
{

    [doctorList release];
    [myTableView release];
    [super dealloc];
}

1 Ответ

2 голосов
/ 25 марта 2010

Метод Dealloc вызывается, когда объект освобождается столько раз, сколько он был сохранен. Когда вы добавляете doctorListView ... (давайте назовем его view) в navigationController (назовем его контроллером), контроллер сохраняет представление. И это также было сохранено при создании. Вот почему вы должны освободить это представление дважды: один раз с dismissModalView ... и один с прямым выпуском.

Я имею в виду что-то вроде этого:

  [[self navigationController] presentModalViewController:doctorListViewNavigationController animated:YES];
  [doctorListViewNavigationController release];  // first time

...

- (void)closeAction {
  [[self navigationController] dismissModalViewControllerAnimated:YES];
               // second time
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...