2010-12-08 11 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]; 
} 

このメソッドでは、私のコンテナビューにサブビューを追加します。時にはイメージを追加することがあります。時々私はクイズを追加します。アニメーションの終わりに起動する別の関数では、常にスタックの一番下にあるサブビューを削除するので、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]; 

しかし、ここでは、

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

あなたは単にnilにクイズを設定しています。これは、クイズを2回目に読み込むと、最初のクイズがリーク空間で失われることを意味します。ここで行うことは、quizViewControllerをリリースするか、複数のクイズを保持する必要がある場合は、NSMutableArrayプロパティを宣言してそれらをすべて保持することです。

メモリリークをチェックする最も簡単な方法は、Xcodeに入り、[実行]メニューから[パフォーマンスツールで実行]> [リーク]を選択することです。リークが発生した場所をトレースして、リークされたすべてのオブジェクトの素敵なリストを取得します。ここでは、あなたが始めるのにgood tutorialです。

+0

ありがとうございました。実際には[self quizViewController]は保持されたプロパティです。 – intomo

+0

しかし、私はsetterメソッド[self setQuizViewController]を使うと文書によれば、そのセッターの隠れた部分は、新しい参照を保持する前に解放されるということです。たぶん私は誤解しているかもしれません。あなたの助言を受けて、パフォーマンスツールを実行します。ありがとう。 – intomo

+0

ああ、そうかもしれない。その答えは、どんな場合でも同じです。漏れをチェックし、そのツールを実行して実行します。これはあなたの質問に答えますか? –

関連する問題