2011-01-08 5 views
1

Привета Я хотел сделать ведьму Application имеет вид корневой шаблона с красивым логотипом на верхних или что-то нагрузку ADN других взглядов чуть нижеДва вида приложение с точкой зрения корневого шаблона

(здесь это то, что я прямо сейчас: Test App )

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

//[currentView release]; 

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

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

+0

Как вы создаете * currentView *? Вы его распределяете? – EmptyStack

ответ

0

Проблема заключается в том, что вы только добавление currentView.view как подвид, так что в настоящее время сохраняется в другом месте, но currentView сам не является. Это означает, что когда вы его отпускаете, это, следовательно, dealloc'd, и его представление будет трудно работать без него.

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

@property (nonatomic, retain) UIViewController *currentView; 

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

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

с

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

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

+0

Спасибо за быстрый ответ. Да, он работает прямо сейчас. – Tieman

0

У меня есть функция, и это выглядит следующим образом:

- (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]; 

}

+0

Не добавляйте это как ответ. Вы можете отредактировать свой вопрос, используя ссылку внизу вашего вопроса .. – EmptyStack

+0

Извините за это :( – Tieman

Смежные вопросы