2010-08-25 2 views
3

Интересно, может ли кто-нибудь помочь мне в отношении управления памятью в приведенном ниже коде. Я особенно заинтересован в rootController, делает это получить сохраняется, когда я initWithRootViewController или делает это вместо того, чтобы (это мое предположение) получить сохраняется с окном addSubView: Я просто интересно, что происходит ...Сохранение rootViewController?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    Base_TableViewController *rootController = [[Base_TableViewController alloc] init]; 
    navController = [[UINavigationController alloc] initWithRootViewController:rootController]; 
    [window addSubview:[navController view]]; 
    [window makeKeyAndVisible]; 

    [rootController release]; 
    return YES; 
} 

- (void)dealloc { 
    [navController release]; 
    [window release]; 
    [super dealloc]; 
} 

EDIT:

Так что, по существу, приведенный выше код является правильным, релиз внизу отменяет выделение в верхней части, «rootController» сохраняется navController?

Большое спасибо, очень благодарен.

Гэри

ответ

3

После вызова Alloc инициализации, то сохраняют отсчет на rootController будет один. Если navController выполнит сохранение в сообщении initWithRootViewController, то после этой строки у него будет счет на два (я уверен, что UINavigationController сохранит его контроллер корневого представления).

Добавление представления navController к окну не повлияет на количество удержаний rootController (оно увеличит количество удержаний на элементе UIView navController).

После отпускания rootController он уменьшит отсчет сохранения до единицы.

Редактировать

Угу. Фактически вы могли бы упростить код немного больше, удалив выпуск внизу и приклеив автообновление вокруг начального распределения.

+0

Вы уверены, что окно не сохранит его? UIView сохраняет свои subviews, а UIWindow является подклассом UIView, поэтому он тоже должен быть. – Toastor

+0

Да. Приложение addSubview просто увеличит счетчик удержания на элементе вида navController. Это не повлияет на счет сохранения на контроллере представления. – RedBlueThing

+1

Вы правы. Как вы говорите по-английски, когда вы что-то читаете, но ваш ум помнит что-то еще? :) Я не видел, чтобы он вызывал контроллер, чтобы вернуть его представление. Виноват! – Toastor

3

initWithRootViewController: сохраняет rootController. И addSubview: сохраняет navController.view

EDIT: Да, это правда. И [rootController release] фактически не выпускает rootController, он просто уменьшает счетчик на один, поскольку он уже сохраняется initWithRootViewController.