Удалить все элементы из UITabBarController - PullRequest
0 голосов
/ 31 августа 2011

Я хотел бы удалить все элементы из UITabBarController в MainWindow.Я могу добиться этого следующим образом:

self.tabViewController.viewControllers = [NSArray array];
self.tabViewController.customizableViewControllers = [NSArray array];

Но как насчет старых контроллеров, которые были там?Это более правильный путь?

- (void)cleanCurrentTabbar {
    for (id ctrl in self.tabViewController.customizableViewControllers) {
        [ctrl release];
    }
    for (id ctrl in self.tabViewController.viewControllers) {
        [ctrl release];
    }
    self.tabViewController.viewControllers = [NSArray array];
    self.tabViewController.customizableViewControllers = [NSArray array];
}

Ответы [ 3 ]

1 голос
/ 31 августа 2011

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

Но вместо того, чтобы давать ему пустой массив, который сам по себе является объектом с автоматическим выпуском, таким как [массив NSArray], вы можете назначить nil.

- (void)cleanCurrentTabbar {
    for (id ctrl in self.tabViewController.customizableViewControllers) {
        [ctrl release];
    }
    for (id ctrl in self.tabViewController.viewControllers) {
        [ctrl release];
    }
    self.tabViewController.viewControllers = nil;
    self.tabViewController.customizableViewControllers = nil;
}

Также, как сказал Джеймс Вебстер в своем комментарии к удару:

«Вы можете или не должны освобождать в зависимости от типа свойства viewControllers и customizableViewControllers, которые есть»

Надеюсь, это поможет вам.

0 голосов
/ 01 сентября 2011

Как сказал @Parth Bhatt, выпуск viewControllers элементов выглядит хорошей идеей. Может быть. Но в моем случае это приводит к странным EXC_BAD_ACCESS ошибкам: enter image description here Таким образом, я получаю self.tabViewController.viewControllers = nil;, и он прекрасно работает.

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

Это чище с точки зрения памяти, да.Вы должны освободить объекты, когда закончите с ними, в том числе перед переназначением.

Однако я заметил, что вы используете self.tabViewController.viewControllers.Это свойство присваивать или сохранять?Если он сохранится, релиз будет сделан изнутри.

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