您好我想要做的应用巫刚低于两个视图应用与根模板视图
(这里,顶部或东西ADN负载其他视图一个很好的标志根模板的观点是什么,我现在所拥有的: Test App )
但是我有一点问题。如果我在文件上TestAppDelegate.m行删除注释58
//[currentView release];
应用程序将与一堆错误崩溃当我尝试切换视图。 但是,如果我评论此行项目分析器告诉我,我有一个潜在的泄漏 与currentView变量。
有人可以抽出一些时间,看看那段代码我做错了什么?
您好我想要做的应用巫刚低于两个视图应用与根模板视图
(这里,顶部或东西ADN负载其他视图一个很好的标志根模板的观点是什么,我现在所拥有的: Test App )
但是我有一点问题。如果我在文件上TestAppDelegate.m行删除注释58
//[currentView release];
应用程序将与一堆错误崩溃当我尝试切换视图。 但是,如果我评论此行项目分析器告诉我,我有一个潜在的泄漏 与currentView变量。
有人可以抽出一些时间,看看那段代码我做错了什么?
的问题是,你只添加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
。
我有一个功能,它看起来像这样:
- (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];
}
不要将此添加为答案。您可以使用问题底部的链接编辑您的问题。 – EmptyStack 2011-01-08 11:49:56
对不起:( – Tieman 2011-01-08 11:58:57
你是如何创建* currentView *?你正在分配它吗? – EmptyStack 2011-01-08 11:42:50