以下の私のコードを見てください。この部分は、スタックからトップビューコントローラー(通常は同じArticleControllerController
)をポップし(単一のコントローラーをポップするか、ルートコントローラーにポップするかに関係なく、問題は同じままであることがわかりました)、新しいコントローラーを作成してスタックに追加します。
問題は、その保持カウントがゼロになることは決してないため、dealloc
メソッドがArticleControllerController
呼び出されることはなく、大量のさまざまなインターフェイスオブジェクトが解放されないままになることです。メモリが少ないために、最終的にアプリがクラッシュします(少なくともデバイスでは、少なくともこの部分が主な問題だと思います)。
- (void) navigateToNewsCategoryByIndex:(int)idx {
[app.nav popViewControllerAnimated:NO]; // could be popToRootController
ArticleControllerController *ac = [[ArticleControllerController alloc] init];
ac.categoryIndex = idx;
[app.nav pushViewController:ac animated:NO];
[ac release];
NSLog(@"AC retain count: %d", [ac retainCount]); // prints 2
}
したがって、popViewControllerAnimatedは、残りの2つの保持のうちの1つだけを解放すると思います。なんで?何を探すべきですか?私に何ができる?2回電話[ac release]
します(それはひどいことです)?