Два просмотра приложения с корневым шаблоном - PullRequest
1 голос
/ 08 января 2011

Привет, я хотел сделать приложение, у которого есть представление корневого шаблона с красивым логотипом сверху или что-то еще и загрузить другие виды чуть ниже

(вот что у меня сейчас: Тестовое приложение)

Но у меня небольшая проблема.Если я удалю комментарий в файле TestAppDelegate.m в строке 58

    //[currentView release];

Приложение будет аварийно завершать работу с кучей ошибок при попытке переключения представлений.Но если я прокомментирую эту строку, Project Analyzer говорит мне, что у меня есть потенциальная утечка с переменной currentView .

Может ли кто-нибудь сэкономить время и увидеть в этом коде, что я сделал неправильно?

Ответы [ 2 ]

0 голосов
/ 08 января 2011

Проблема в том, что вы добавляете currentView.view только как подпредставление, так что оно сохраняется в другом месте, а само currentView - нет. Это означает, что когда вы отпускаете его, он, следовательно, освобождается, и его представление будет трудно работать без него.

Одним из решений было бы иметь currentView в качестве переменной экземпляра и создать для нее свойство, чтобы управление памятью для вас было сделано.

@property (nonatomic, retain) UIViewController *currentView;

и затем замените строку как

currentView = [[First alloc] initWithNibName:@"First" bundle:nil];

с

self.currentView = [[First alloc] initWithNibName:@"First" bundle:nil];

Это освободит старый контроллер вида перед сохранением нового. Тогда, наконец, не забудьте выпустить currentView в методе dealloc класса.

0 голосов
/ 08 января 2011

У меня есть функция, и она выглядит так:

- (void) switchView: (int) viewType {

for (UIView *view in [self.viewController.rootView subviews]) {
    [view removeFromSuperview];
}

UIViewController *currentView = nil;

switch (viewType) {
    case 1:
        currentView = [[First alloc] initWithNibName:@"First" bundle:nil];
        break;

    case 2:
        currentView = [[Second alloc] initWithNibName:@"Second" bundle:nil];
        break;

}

[self.viewController.rootView addSubview: [currentView view]];
[self.window makeKeyAndVisible];

//[currentView release];

}

...