2010-12-08 5 views
0
- (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 개 이상의 하위 뷰를 가질 수 없습니다.viewStack 및 메모리 관리에 다른 뷰 추가하기

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

내 질문은 여기에 메모리 누수가 있습니까? 이것은 정상적으로 실행되는 것 같습니다. 미리 감사드립니다.

답변

0

quizViewControllerretain 개체로 할당했는지 여부에 따라 달라집니다. 그렇게하면 누출이 발생합니다. 이 부분은 좋아 보인다 : 여기

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

그러나, 당신은 단순히 nil에 퀴즈를 설정하는

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

합니다. 즉, 두 번째로 퀴즈를로드하면 첫 번째 퀴즈는 누수 공간에서 사라집니다. 여기서해야 할 일은 quizViewController을 릴리스하거나, 여러 퀴즈를 개최해야하는 경우 NSMutableArray 속성을 모두 보유하도록 선언하십시오.

메모리 누수를 확인하는 가장 쉬운 방법은 Xcode로 이동하여 "실행"메뉴에서 "성능 도구와 함께 실행 >> 누출"을 선택하는 것입니다. 누출 된 모든 객체의 멋진 목록을 얻을 수 있으며, 누수가 발생한 부분을 추적 할 수 있습니다. 시작하기에 앞서 good tutorial이 있습니다.

+0

감사합니다. 사실 [self quizViewController]는 유지 된 속성입니다. – intomo

+0

하지만 docs에 따르면 setter 메서드 [self setQuizViewController]를 사용하면 해당 설정 자의 숨겨진 부분은 새 참조를 유지하기 전에 해제된다는 것입니다. 어쩌면 나는 오해하고있다. 귀하의 조언을 듣고 성과 도구를 실행하겠습니다. 감사. – intomo

+0

아, 그 말이 맞을 수도 있습니다. 어떤 경우에도 누출 여부를 확인하고 그 도구를 실행하면 대답은 동일합니다. 이 질문에 대한 대답이 있습니까? –

관련 문제