0

私のアプリケーションには約9ViewControllersがあります。を使用してViewControllerを開いていpresentModalViewControllerます。ユーザーがバックグラウンドに入ってフォアグラウンドになるたびに、1番目のViewControllerを表示したいと思います。ユーザーが8番目のViewControllerにバックグラウンドを入力してアプリケーションを再度開くと、1番目のViewControllerを表示する必要があります。

私はで次のコードを使用していますapplicationWillEnterForeground

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    self.HomeScreenViewController = [[HomeScreenViewController alloc] initWithNibName:@"HomeScreenViewController" bundle:nil];
    self.window.rootViewController = _homeScreenViewController;
    [self.window makeKeyAndVisible];
}

そしてそれはメモリリークを示しています。HomeCtrlを再度初期化しているので、明らかにメモリリークが表示されますが、修正方法がわかりません。誰かが私を助けることができますか?UINavigationControllerViewControllersは右側または左側からプッシュされるため、使用していません。

4

2 に答える 2

3

変化する:

self.HomeScreenViewController = [[HomeScreenViewController alloc] ....];

_HomeScreenViewController = [[HomeScreenViewController alloc] ....];

または、次のコードのようなことを行うことができます:

HomeScreenViewController *tempHSVC = [[HomeScreenViewController alloc] ....];
self.HomeScreenViewController = tempHSVC;
[tempHSVC release];
self.window.rootViewController = self.HomeScreenViewController //or use just _homeScreenViewController;
[self.window makeKeyAndVisible];

そして、objcでのメモリ管理に関するいくつかの記事を読んでください。

于 2012-08-09T10:58:00.733 に答える
1

HomeScreenViewControllerプロパティは次のように宣言されていると思います

@property (nonatomic, retain) HomeScreenViewController *HomeScreenViewController

保持されるプロパティのデフォルトのsetterメソッドは、オブジェクトを保持します。自動解放をallocinitに追加します。

self.HomeScreenViewController = [[[HomeScreenViewController alloc] initWithNibName:@"HomeScreenViewController" bundle:nil] autorelease];

参照:高度なメモリ管理プログラミングガイド

于 2012-08-09T11:07:32.337 に答える