2

これは基本的にここでの私の他の質問に関連しています

NSMutableArrayviewControllers を含むをリリースしようとしています。そうです:

self.viewControllers = nil;

別のビューにviewWillDisappear移動しているためです。しかし、私が何をしてもView Controllerは解放されません。私も試しました:

[[scrollView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

scrollview は、含む を所有するビューNSMutableArrayです。

含まれている参照カウントNSMutableArrayは 0 ですが、ライブ ビュー コントローラー (インストゥルメント内) のカウントは変化していません。

4

3 に答える 3

1

提供された詳細を考えると、診断するのは難しいでしょう。ただし、Instruments (Leaks など) を実行することで、これを自分ですばやく診断できます。それに応じて構成すると、次のことが可能になります。

  • 保持サイクルを指摘する
  • すべての参照カウント操作を記録する
  • および/またはヒープショット分析を使用できます

これらのツールのコツをつかめば、そのような問題を特定するのにかかる時間は (通常) 数分に短縮されます。

于 2012-11-11T06:51:19.933 に答える
0

簡単なテストを行うことができます:

- (void) test
{
    NSMutableArray *testArray = [NSMutableArray arrayWithCapacity:0];
    // MyViewController is your view controller class
    MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; // add autorelease if you aren't using ARC
    [testArray addObject:vc];

    // On exit, testArray will be released, so will vc
}

MyViewController の dealloc にブレークポイントを設定し、それが呼び出されたかどうかを確認します。コード内ではなく呼び出された場合は、View Controller がどこかに保持されていることを意味し、保持されている場所を見つける必要があります。

于 2012-11-11T10:10:26.830 に答える