我的iOS应用程序在最初的几分钟内表现正常,但在使用10到15分钟后,动画(例如视图推送动画和UIAlertView动画)表现异常。他们似乎比平常更快地制作动画。之后,该应用程序冻结而不会崩溃。我必须强行杀死应用程序并重新启动才能再次使用它。
当我暂停调试器时,它会停止在线程#1(可能是UI线程)上,并显示以下汇编代码行:
注意:我已经检查了我的代码,并且在主UI线程上没有执行长时间运行的任务。
可能是什么原因?如何使用Instruments调试这些案例?
更新:实际上我已经缩小了一点。 我有一个由自定义单元组成的表视图。这些单元格每个都有2个按钮,这导致两种不同的形式,而didSelectRowAtIndexPath导致不同的视图。 当我继续从按钮上来回查看这些表格时,应用程序开始显示上述异常行为并最终冻结。
(在此期间来回,Instrument's Leaks显示出大量泄漏,但它们来自基础库。) 注意:它使用ARC
以下是代码段:
//Class interface
@interface tableViewController : UIViewController <TableViewCellDelegate , NetworkManagerDelegate> {
IBOutlet UITextField *field1;
NSMutableArray *tableData;
UIAlertView *alertView;
IBOutlet UIButton *backButton;
NetworkManager *netMan;
DetailsVC *detailsVC;
AnotherDetailsVC *anotherDetailsVC;
}
....
..
@end
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"cellId";
SecurityViewCell *cell = (TableCellView *)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"TableCellView" owner:self options:nil] objectAtIndex:0];
} else {
NSLog(@"Cell reused");
}
obj1 = [tableData objectAtIndex:indexPath.row];
cell.nameLabel.text = obj1.name;
cell.delegate = self;
cell.index = indexPath.row;
cell.avatar.image = [UIImage imageNamed:@"IconTableRow"]; // for case of no photo on cell
[netMan lazyLoadPhotoNamed:obj1.logo onImageView:cell.avatar];
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
cell.backgroundColor = [UIColor clearColor];
return cell;
}
// TableViewCell button press action
- (void) buttonPressed:(int)index {
obj1 = [tableData objectAtIndex:index];
if( obj1.isOfType1){
detailsVC = [[DetailsVC alloc] init];
detailsVC.delegate = self;
[detailsVC setObjectOnForm:team1];
[self.navigationController pushViewController:detailsVC animated:YES];
} else {
...
...
}
// Back button of DetailsVC
-(IBAction) backButtonPressed {
[self.navigationController popViewControllerAnimated:YES];
}