0

我声明了一个全局对象:

YViewController * yViewController

在应用程序启动时,我正在调用:

[self methodOne];

该方法这样做:

-(void)methodOne
{
 yViewController = [[YViewController alloc] initWithNibName:@"YViewController" bundle:nil];
 self.window.rootViewController=yViewController;
}

当在 YViewController 中单击一个按钮时,我正在调用:

[self methodTwo];

该方法这样做:

-(void)methodTwo
{
  XViewController * xViewController = [[XViewController alloc] initWithImage:myImage];
  self.window.rootViewController=xViewController;
}

当点击后退按钮时,XViewController我正在调用[self methodOne];它导航回YViewController.

问题是,当我使用 ARC 时,我无法刷新/释放xViewController对象。此外,在检查仪器时,当我在和XViewController之间来回敲击时,记忆会不断增加。XViewControllerYViewController

在这种情况下,如何使用 ARC 管理内存?

4

1 回答 1

1

如果 XViewController 的源是开放的,我会调整它以配合导航。无论如何 ..

好吧,基本上你每次都在创建一个新的 ViewController 对象,这就是导致内存堆积的原因。

你应该有'XViewController * xViewController'和'YViewController * yViewController'作为类变量,你的方法应该是这样的,例如。

查看对象是否存在,如果存在,则不要再次分配它。

-(void)methodTwo
{
 if(xViewController == nil)
 {
   xViewController = [[XViewController alloc] initWithImage:myImage];
 }
  self.window.rootViewController=xViewController;

}
于 2012-07-24T07:10:50.600 回答