Это вызывает утечку памяти и как я могу это остановить? - PullRequest
0 голосов
/ 08 декабря 2010

Я использую UIViewController XIB для создания своего UITableViewCell в IB, затем я реализовал его в коде, подобном следующему:

    if(cell == nil)
    {
        UIViewController *viewController = [[UIViewController alloc] initWithNibName:@"TotalViewCell" bundle:nil];
        cell = (TotalViewCell *)viewController.view;
        //[viewController release];
    }
    [[cell totalButton] setTitle:@"$100,000" forState:UIControlStateNormal];

    // Action when totalButton is tapped
    [[cell totalButton] addTarget:self action:@selector(showTotalDetail:) forControlEvents:UIControlEventTouchUpInside];

    return cell;

Обычно я выпускаю viewController, но я помещаю UIButton внутри этой ячейки, и когдапользователь нажимает кнопку, вызывается showTotalDetail.Это код для showTotalDetail:

-(void)showTotalDetail:(id)sender
{
    // Move the totalTableView up!
    CGRect totalDetailTableViewFrame = CGRectMake(20, 200, 280, 200);
    [totalTableView setFrame:totalDetailTableViewFrame];

    // Reload the new totalTableView
    [self viewWillAppear:YES];
}

Функция в основном изменяет размер tableView и перемещает его в другое место на экране.Итак, если я освобождаю viewController, я получаю ошибку EXC_BAD_ACCESS.Это работает, если я не выпускаю, но я боюсь, что у меня будут утечки памяти.

Любой совет?

Спасибо.

1 Ответ

3 голосов
/ 08 декабря 2010

Вы создаете UIViewController для каждого UITableViewCell?Это довольно нестандартное поведение.Если вам нужно настроить поведение UITableViewCell, возможно, лучше создать его подкласс, чем использовать контроллер представления.

Если вам нужно загрузить ячейку табличного представления из пера, посмотрите на * 1006 Apple.* Table View Руководство по программированию для iOS .Этот пример находится там без использования контроллера представления.

Что касается вашего вопроса: вы правы, что в этом сценарии утечка UIViewController произойдет.

...