为viewStack和内存管理添加不同的视图

时间:2010-12-08 04:12:04

标签: iphone objective-c

- (void)loadQuiz:(NSInteger )quizNum {
    if([self quizViewController] != nil)
    {
        [self setQuizViewController:nil];
    }
    QuizViewController *quiz = [[QuizViewController alloc] initWithNibName:@"QuizViewController" bundle:nil];
    [quiz setUp:quizNum];
    [self setQuizViewController:quiz];
    [quiz release];

    [[self view] addSubview:[[self quizViewController]view]];
    [self setSlide1:[[[self view] subviews] objectAtIndex:0]];
    [self setSlide2:[[[self view] subviews] objectAtIndex:1]];
    [[self slide1] setHidden:NO];
    [[self slide2] setHidden:YES];
    [self performTransition];
}

在这个方法中,我将子视图添加到我的containerView中。有时我会添加一张图片。有时我会添加一个测验。在动画结束时触发的另一个函数中,我总是删除堆栈底部的子视图,所以我永远不会有超过2个子视图。

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
    [[self model] setTransitioning:NO];
    [[[[self view]subviews] objectAtIndex:0] removeFromSuperview];
}

我的问题是我在这里建立了内存泄漏吗? 这似乎运行良好。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

这取决于您是否设置了分配给它的quizViewControllerretain个对象。如果你这样做,那么你就有泄漏。这部分看起来不错:

QuizViewController *quiz = [[QuizViewController alloc] initWithNibName:@"QuizViewController" bundle:nil];
[quiz setUp:quizNum];
[self setQuizViewController:quiz];
[quiz release];

但是,

if([self quizViewController] != nil)
{
    [self setQuizViewController:nil];
}

您只是将测验设置为nil。这意味着第二次加载测验时,第一次将在泄漏空间中丢失。这里要做的就是释放quizViewController,或者,如果你确实需要举行多个测验,请继续并声明一个NSMutableArray属性来保存它们。

检查内存泄漏的最简单方法是进入Xcode并从“运行”菜单中选择“使用性能工具运行>>泄漏”。您将获得所有泄漏对象的良好列表,其中包含泄漏发生位置的跟踪。这是一个good tutorial,可以帮助您入门。