使用ARC的内存管理,奇怪的行为

时间:2012-07-24 06:45:35

标签: iphone ios ipad automatic-ref-counting

我宣布了一个全局对象:

YViewController * yViewController

在App Launch中我正在致电:

[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对象。检查仪器时, 当我在XViewControllerXViewController之间来回切换时,YViewController的记忆不断增加。

如何使用ARC管理此类情况下的内存?

1 个答案:

答案 0 :(得分:1)

如果XViewController的源是打开的,我会调整它以进行导航。任何方式..

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

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

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

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

}