- (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];
}
我的问题是我在这里建立了内存泄漏吗? 这似乎运行良好。 提前谢谢。
答案 0 :(得分:0)
这取决于您是否设置了分配给它的quizViewController
到retain
个对象。如果你这样做,那么你就有泄漏。这部分看起来不错:
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,可以帮助您入门。