Как правильно выпустить UITabController - PullRequest
3 голосов
/ 01 ноября 2011

Это может звучать как вопрос новичка ... но, тем не менее, я новичок в разработке для iOS.

Я программно создал UITabController объект следующим образом.

mTabBarController = [[UITabBarController alloc] init];
...
mTabBarController.viewControllers = [NSArray arrayWithArray:tabBarItems];
[tabBarItems release];

И выпуская mTabBarController в dealloc следующим образом.

- (void)dealloc {
    [mTabBarController release];
}

Теперь мой вопрос: получу ли я утечку памяти? Когда я присваиваю значение t viewController, счетчик ссылок tabBarItems остается равным 1. Когда я выпускаю mTabBarController, он также выпускает все свои контроллеры представления?

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

UITabBarController никогда не следует размещать в качестве дочернего элемента другого ViewController, поэтому вам всегда придется выпускать его в dealloc.Если представление вашего TabBarController является дочерним видом окна вашего приложения, то нормально, что он не освобождается в dealloc, так как единственный вызов, который когда-либо будет вызывать dealloc - это когда ваша программа закрывается, и в этом случае ваш контроллер будет освобожден в любом случае.Тем не менее, некоторые люди любят выпускать его в dealloc в любом случае, только чтобы сохранить их код единообразным.То, что вы делаете, прекрасно.

1 голос
/ 01 ноября 2011

Да, контроллеру вкладок принадлежит массив контроллеров представления (и все в массиве сохраняется).Вы не создаете утечку, пока вы правильно освобождаете или автоматически выпускаете элементы, которые вы добавляете в массив tabBarItems.

Это действительно помогает рассматривать отношения объекта как владельца.

...