1

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

[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; 
}
4

1 回答 1

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?您通常需要在单独的线程上使用它们,但应该在主线程上显示活动指示器。

而且,如果你想遵循任何约定,你应该ActIndactInd.

于 2011-06-04T11:23:44.950 回答