两个视图App与根模板视图

时间:2011-01-08 11:36:57

标签: iphone xcode ios4 ios-simulator

您好我想做的应用程序女巫有一个根模板视图,顶部有一个漂亮的标志或者下面加载其他视图的东西

(这是我现在所拥有的:Test App

但我有一点问题。如果我将删除第58行文件TestAppDelegate.m中的注释

    //[currentView release];

当我尝试切换视图时,应用程序会因一堆错误而崩溃。 但如果我评论这一行项目分析器告诉我,我有潜在的泄漏 使用 currentView 变量。

有人可以节省一些时间,在那段代码中看到我做错了吗?

2 个答案:

答案 0 :(得分: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];

}

答案 1 :(得分: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];

这将在保留新视图控制器之前释放旧视图控制器。最后,不要忘记在班级的currentView方法中发布dealloc