0

我的申请中有大约 9 个ViewControllers。我正在使用presentModalViewController. 每次用户进入后台并进入前台时,我都想显示第一个 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,但我不知道如何修复它。谁能帮我 ??我没有使用,UINavigationController因为 ViewControllers 是从右侧或左侧推送的。

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

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

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

另请参阅:高级内存管理编程指南

于 2012-08-09T11:07:32.337 回答