应用程序很少崩溃。有一次它崩溃了,我得到了以下报告:
[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;
}
答案 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
。