UIPoverController создает Live байты при каждом его использовании - PullRequest
0 голосов
/ 04 декабря 2011

Я выскакиваю контроллер Popover на обработчик событий. Каждый раз, когда вызывается этот обработчик событий, объем памяти моего приложения увеличивается. После того, как я отключил контроллер View, я ожидаю, что объем памяти будет уменьшен, но этого никогда не произойдет.

Я использовал инструмент Распределения в Инструментах для Профилирования памяти.

Я что-то здесь не так делаю?

-(IBAction)createNewAccount :(id) sender
{

    GSNewAccountViewController *createNewAccountVC = [[GSNewAccountViewController alloc]initWithNibName:@"GSNewAccountViewController" bundle:nil];        
    UIPopoverController *popover = 
    [[UIPopoverController alloc] initWithContentViewController:createNewAccountVC]; 

    popover.popoverContentSize = CGSizeMake(kScrollViewWidth, kScrollViewHeight);

    [popover presentPopoverFromRect:CGRectMake(770,-420,320,480) inView:self.view permittedArrowDirections: UIPopoverArrowDirectionUp animated:YES];

    popover.delegate = self;

    [createNewAccountVC release];


}

- (void)popoverControllerDidDismissPopover:
(UIPopoverController *)popoverController {

    [popoverController release];

}

UPDATE:

Я освобождаю все выходы GSNewAccountController в его методе ViewDidUnload. Но даже когда я закрываю Popovercontroller, метод vieUnDIdload не вызывается

1 Ответ

1 голос
/ 05 декабря 2011

Вы должны проверить, выпускается ли ваш GSNewAccountViewController при выпуске popoverController. Вместо того, чтобы отслеживать количество живых байтов, проверьте количество живых объектов GSNewAccountViewController. Для этого в инструменте распределения перейдите в правый верхний угол окна инструментов, отфильтруйте распределения, введя GSNewAccountViewController в текстовое поле. Затем проверьте, что происходит каждый раз, когда вы запускаете IBAction. Количество жизней должно равняться 1 при запуске IBAction и возвращаться к нулю при выпуске popoverController.

Если количество живых объектов GSNewAccountViewController никогда не обращается в ноль, вам следует проверить, не создан ли какой-либо цикл сохранения в вашем классе GSNewAccountViewController, который препятствует вызову методов dealloc и viewDidUnload. С циклом сохранения GSNewAccountViewController сохраняет объект, который, в свою очередь, сохраняет ваш GSNewAccountViewController. Так как оба сохраняют друг друга, их методы dealloc не вызываются и объекты никогда не уничтожаются.

Чтобы проверить, попробуйте создать очень простой проект iPad с кнопкой на главном экране с помощью IBAction, чтобы представить popoverController с viewController, загруженным из NIB, с простым ванильным подклассом UITableViewController. Если посмотреть на инструмент Allocations, он показывает, что подкласс создается при показе popoverController и уничтожается при закрытии popoverController.

Удачи

...