我是否在动画后过早发布了这个对象?

时间:2012-10-15 10:11:07

标签: ios xcode animation memory-management

我有一个UIView,我正在制作动画。 这里的事情是,我需要在动画后释放theView

originalRECT = [[UIScreen mainScreen] bounds];

if(theView)
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

    theView setFrame = originalRECT;

    [UIView commitAnimations];
    [theView autorelease];
    theView = nil;
}

所以我知道代码将View设置为nil,但是动画does finish ok(没有SIGABRT或类似的东西)
或者是否有一个回调函数我可以用来知道视图消失了?在这种情况下如何使用这样的函数?

谢谢!

1 个答案:

答案 0 :(得分:1)

很少 -

首先,如果您想确定可以使用:

[UIView animateWithDuration:1.0 
                  delay:0.0 
                options:UIViewAnimationCurveEaseInOut 
             animations:^ {
                 //your animation
                  theView setFrame = originalRECT;
             } 
             completion:^(BOOL finished) {
                 //Animation finished you can release
                 [theView release];
 }];

第二 - 为什么你使用autoRelease而不是发布?

[theView release];

第三 - 只是因为你不知道。 使用ARC 它会让您的生活更轻松。您可以在此处阅读更多内容ARC tutorial