IOS添加和删除子视图内存泄漏

时间:2012-03-01 02:23:49

标签: ios memory-leaks subview

我已经尝试了几天来解决这个问题,但我觉得我已经错了,或者只是错过了一些非常简单的东西。

我有一个单独的视图,它采用滑动手势,在滑动时,它将尝试从nib文件创建子视图。我能够加载子视图并删除子视图,但是在某处需要分配视图或删除它。

在当前视图.m文件中,我正在合成我的第二个视图,在第一个视图的.h文件中,我还有一个: @class settingsviewcontroller

settingsviewcontroller * settingsview

然后 @property nonatomic retain for settingsview

在下面的代码中,我正在分配子视图。它在没有[settingsview发布的情况下工作[但是我得到了一个糟糕的内存错误。

在代码的第二部分中,它是一个来自settingsviewcontroller的函数,用于删除视图。它需要用户执行操作并在屏幕外设置动画,并尝试将其删除,或者至少我认为它也会尝试。

- (IBAction)swiping:(id)sender {
  //SettingsViewController *SettingsView = [[SettingsViewController alloc] init];

  settingsView = [[SettingsViewController alloc] init];

  CATransition *animation = [CATransition animation];
  [animation setDuration:0.5f];
  [animation setType:kCATransitionPush];
  [animation setSubtype:kCATransitionFromTop];
  [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

  [self.view addSubview:[settingsView view]];
  [[self.view layer] addAnimation:animation forKey:@"SwitchToView1"];

  [settingsView release];
}



- (IBAction)rollOut:(id)sender {
  UIView *currentView = self.view;
  [UIView beginAnimations:nil context:nil];
  [UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];
  //[UIView setAnimationDidStopSelector:@selector(release)];
  [UIView setAnimationDuration:0.5f];
  currentView.transform = CGAffineTransformMakeTranslation(currentView.frame.origin.x, 480);
  [UIView commitAnimations];
}

请给我一些方向,如果你指的是我正确的方向,我可以理解怎么做。

1 个答案:

答案 0 :(得分:4)

[self.view addSubview:[settingsView view]];

此代码不会保留您的settingsView,而是“settingsview的视图”,因此如果您调用[settingsView release]; settingsView已经发布,如果您在某处调用settingsView,则会出现内存错误。

这个“@property nonatomic retain for settingsview”,所以你可以替换[settingsView release]; by self.settingsView = nil;