applicationWillEnterForeground中的内存泄漏

时间:2012-08-09 10:49:23

标签: iphone ios cocoa-touch uiviewcontroller uiapplicationdelegate

我的申请表中约有9 ViewControllers。我正在使用presentModalViewController打开ViewControllers。我希望每次用户进入后台并显示前景时显示第一个ViewController。如果用户在第8个ViewController中输入背景并再次打开应用程序,我需要显示第一个视图控制器。

我在applicationWillEnterForeground

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

它显示内存泄漏。显然它会显示内存泄漏,因为我再次初始化HomeCtrl,但我不知道如何解决它。谁能帮我 ?? 我没有使用UINavigationController,因为ViewControllers是从右侧或左侧推动的。

2 个答案:

答案 0 :(得分: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中阅读一些关于内存管理的文章。

答案 1 :(得分:1)

我假设HomeScreenViewController属性声明为

@property (nonatomic, retain) HomeScreenViewController *HomeScreenViewController

保留属性的默认setter方法将为您保留对象。添加autorelease到alloc init:

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

另请参阅:Advanced Memory Management Programming Guide