4

可変配列に格納されている/格納されているいくつかのアイテムでdeallocメソッドを実行しようとしていますが、それを実現する方法が見つからないようです。

大規模なARCプロジェクトで作業しているときにこの問題が発生し、この投稿で答えが見つかりました。オブジェクトをnilに設定すると、deallocメソッドが呼び出されません。その回答を読んだ後、ARCが問題のコード(以下)をどのように処理するかを理解したと感じましたが、非常に単純なテストプロジェクトで実行した後、同じ結果が得られました。

メインのViewControllerで、可変配列(強力なプロパティ)を初期化し、それに他のViewControllerを追加します。次に、すべてのオブジェクトを削除します。

- (void)viewDidLoad{
    [super viewDidLoad];

    containerArray = [[NSMutableArray alloc]init];
    for(int i = 0; i < 10; i++){

        //item +1 (item at +1)
        Item *item = [[Item alloc]initWithNibName:nil bundle:nil];

        //item +1 (item at +2)
        [containerArray addObject:item];

        //ARC should release item -1 (item at +1...I think)
    }

    //removeAllObjects should release each item -1 (item(s) at 0)
    [containerArray removeAllObjects];
    //dealloc should be called...
}

アイテムビューコントローラの場合:

-(void)dealloc{
    NSLog(@"item dealloc");
}

どんな助けでも大歓迎です。

4

1 に答える 1

2

あなたのコードを3回読んだ後、私はあなたのアプローチに欠陥を見つけることができませんでした。私はすべてが正しいと思いました、そしてdeallocあなたが配列からすべてのオブジェクトを削除するときそれは10回呼び出されるべきです。

それから私はコードを試してみることにしました、そして私はちょうどそれを発見しました....私たちは両方とも正しかったです:)コードは完璧です。それを実行すると、アイテムのdealloc出力が10回取得されます。

  • ARCプロジェクトでそれを試していると本当に確信していますか?
  • クラスのdealloc中にいますか?Item

あなたが正しくやっていないことが他にもありますが、コードと引数は正しいです。

于 2012-07-13T22:53:02.393 に答える