0

ビューコントローラーをモーダルに提示しようとしています:

- (IBAction)addReference {

    ReferenceAddViewController *referenceAddViewController = [[ReferenceAddViewController alloc] initWithNibName:@"ReferenceAddViewController" bundle:nil];
    [referenceAddViewController setDelegate:self];

    [self presentModalViewController:referenceAddViewController animated:YES];

    [referenceAddViewController release];
}

ただし、[referenceAddViewController release] を呼び出すと、後でモーダル ビューが閉じられたときに、「[CALayer release]: message sent to deallocated instance 0x4b90370」でアプリがクラッシュします。

Instruments でスタック トレースと参照カウント履歴を実行しても、決定的な結果は得られず、履歴ステップは 2 つしかありませんでした。

  • 0: カウント 1 を保持 - コード内の presentModalViewController による Malloc。
  • 1: 保持カウント -1 - main.m 以外のコードには何もありません

参照カウントが 1 から -1 にスキップする方法は非常に興味深いですか? Instruments はすべての参照カウントの変更を記録しますか?

この問題をさらにデバッグするにはどうすればよいですか?

4

2 に答える 2

1

モーダル ビュー コントローラーを閉じた後、ビュー コントローラーを解放する必要はありません。を 1増やし、1 減らしますpresentModalViewController:animated:retainCountdismissModalViewControllerAnimated:

したがって、割り当て (+1)、提示 (+1)、解放 (-1) した後、破棄 (-1) するとretainCount0 になり、オブジェクトの割り当てが解除され、すべて問題ありません。閉じた後に解放しようとすると、オブジェクトは既に割り当て解除されており、機能しません。

于 2010-07-15T11:02:13.833 に答える
0

お返事ありがとうございます。 alloc を呼び出すと、最初に参照カウントを 1 に増やすといつも思っていました。

その場合、presentModalViewController:animated: が呼び出されると、参照カウントは 2 になりますか?

モーダル ビューを閉じると、再び 1 になりますが、解放していないため 0 にはなりませんか?

于 2010-07-16T05:29:27.187 に答える