0

iOS アプリケーションを作成しており、ARC モードを有効にしています。ScrollView に 24 個のインスタンスをロードしていますが、一度に表示されるビューは 3 つだけです。そのため、すでにメモリにロードされている他の不要なインスタンスを削除します

if((NSNull *)[viewControllers objectAtIndex:2] != [NSNull null]) {
    [viewControllers replaceObjectAtIndex:2 withObject:[NSNull null]];
    [content3.view removeFromSuperview];
    //remove third content page
    [content3 viewDidUnload];
    //set nil to instance to memory management
    content3 = nil;

    NSLog(@"Content 3 removed");
}

しかし、プロファイラーで確認すると、メモリは解放されず、自動的に増加するだけです。

この問題に関するヒントを教えてもらえますか?

ありがとう

4

1 に答える 1

0

あなたのコードには多くの問題があると思います:

  1. 重要な問題の 1 つは、デリゲート メソッドを呼び出していることですviewDidUnload。そうしないと、アプリの奇妙な動作に直面することになります。
  2. メモリからオブジェクトを削除する必要がある場合は、nil に設定してください。
  3. 私はあなたの if 条件が機能しないと思います.なぜあなたはそれを NSNull にキャストしているのですか?

このコードで確認してください:

if([viewControllers objectAtIndex:2] != [NSNull null])
{
    [viewControllers replaceObjectAtIndex:2 withObject:[NSNull null]];
    [content3.view removeFromSuperview];
    content3 = nil;
    NSLog(@"Content 3 removed");
}
于 2013-02-07T06:05:18.093 に答える