如何在UIView动画后正确释放视图? :)

时间:2011-03-01 01:35:49

标签: iphone cocoa-touch memory-management ios4

我有以下方法:

- (void)add:(id)sender {

MyAddViewController *controller = nil;

controller = [[MyAddViewController alloc] initWithAddType:1];

//controller.delegate = self; 

// Do some animation. Slide it in from the right side of the screen.

    CGPoint initialCenter = self.view.center;
    controller.view.center = 
        CGPointMake(initialCenter.x + 320, initialCenter.y);

    // Add the subview now with it's center + 320 off the screen.
    [self.view addSubview:controller.view];

    [UIView beginAnimations:@"animation" context:NULL];
    [UIView setAnimationDuration:0.35];
    [UIView setAnimationDelegate:self];
    controller.view.center = CGPointMake(initialCenter.x, initialCenter.y); 
  //[UIView setAnimationDidStopSelector:@selector(aMethodToBeCalledAfterAnimationEnd:finished:context:)];
    [UIView commitAnimations];

  //[controller release];
    }

您看到我的控制器版本是我的add方法中的最后一行。如果我取消注释该行,则动画完全消失,它只是将视图转储到没有动画的位置。

有没有更好的方法来执行发布而无需创建另一个通过 [UIView setAnimationDidStopSelect:@selector进行清理的方法(aMethodToBeCalledAfterAnmiationEnd ...

或者我可以执行 setAnimationDidStopSelector:@selector([controller release])之类的操作吗? :)

提前致谢!

3 个答案:

答案 0 :(得分:1)

使用setAnimationDidStopSelector:是解决动画完成后释放资源的一般问题的正确方法。

退后一步,重新考虑你在这里做的事情。你为什么要释放刚刚创建的控制器?如果您只是为了获取视图而创建控制器,那么这不是正确的方法。构建自己的工厂方法来创建视图,或使用NSBundle中的方法从NIB加载视图。

答案 1 :(得分:0)

你可以这样做:

[UIView setAnimationDelegate: controller];
[UIView setAnimationDidStopSelector:@selector(release)];

答案 2 :(得分:0)

我看到你标记了这个iphone-sdk-4.0。您可以使用新的基于块的动画来执行此操作以及任何其他清理。有关详细信息,请参阅the documentation