uiviewanimationstate发布。程序随机崩溃

时间:2011-06-04 10:14:36

标签: iphone crash uiviewanimation

应用程序很少崩溃。有一次它崩溃了,我得到了以下报告:

[UIViewAnimationState release]:message sent to deallocated instance

我无法找到使用它的位置。我的代码中没有使用任何动画。崩溃的原因是什么?

这是我怀疑崩溃的代码

-(void)showMessageSendingIndicator
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init]; 
    self.av1=[[UIAlertView alloc] initWithTitle:@"Sending Message, please wait..." message:@"" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
    UIActivityIndicatorView *ActInd=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    [ActInd startAnimating];
    [ActInd setFrame:CGRectMake(125, 60, 37, 37)];
    [self.av1 addSubview:ActInd];
    [self.av1 show];
    [pool release];
    return; 
}

1 个答案:

答案 0 :(得分:2)

首先,您将av1设置为保留对象。用以下内容替换此行:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sending Message, please wait..." message:@"" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];

self.av1 = alert;

[alert release];

其次,你永远不会释放ActInd。在[ActInd release]之前添加[pool release]。这是安全的,因为av1会在您致电addSubview:

时将其保留

在侧节点上,为什么NSAutoreleasePool?您通常需要在单独的线程上使用它们,但是应该在主线程上显示活动指示符。

此外,如果您想遵守任何约定,则应将ActInd替换为actInd