2011-01-08 59 views
1

您好我想要做的应用巫刚低于两个视图应用与根模板视图

(这里,顶部或东西ADN负载其他视图一个很好的标志根模板的观点是什么,我现在所拥有的: Test App

但是我有一点问题。如果我在文件上TestAppDelegate.m行删除注释58

//[currentView release]; 

应用程序将与一堆错误崩溃当我尝试切换视图。 但是,如果我评论此行项目分析器告诉我,我有一个潜在的泄漏 与currentView变量。

有人可以抽出一些时间,看看那段代码我做错了什么?

+0

你是如何创建* currentView *?你正在分配它吗? – EmptyStack 2011-01-08 11:42:50

回答

0

的问题是,你只添加currentView.view作为一个子视图,以便被其他地方保留,但currentView本身不是。这意味着,当你释放它时,它会被释放,如果没有它,它的视图将会很难工作。

一个解决方案是将currentView作为实例变量并为其创建属性,以便为您完成内存管理。

@property (nonatomic, retain) UIViewController *currentView; 

,然后替换喜欢

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

一个符合

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

这保留了新的人之前将释放旧的视图控制器。然后最后不要忘记在dealloc这个课程中发布currentView

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 2011-01-08 11:49:56

+0

对不起:( – Tieman 2011-01-08 11:58:57