内存泄漏是当一个对象或变量在使用完成后没有释放掉,那么如果我们走了另外一个极端情况会什么样呢?这就导致过度释放(over release)问题,从而使对象“僵尸化”,对象称为僵尸(zombies)对象。一个对象已经被释放过了,或者调用者没有这个对象的所有权而释放它, 都会造成过度释放,产生僵尸对象。试图调用僵尸对象方法应用会崩溃(应用直接跳出),并抛出异常EXEC_BAD_ACCESS,那么EXEC_BAD_ACCESS给予的提示通常是毫无debug价值的信息。

 

简单一句话描述:

僵尸对象:已经被回收的对象,或者说对象所对应的内存地址已经不可用的对象称为僵尸对象。僵尸对象不可用

 

下面是一段有问题的代码

 1 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
 2  
 3 { 
 4  
 5     NSUInteger row = [indexPath row]; 
 6  
 7     NSDictionary *rowDict = [self.listTeams objectAtIndex:row]; 
 8  
 9     NSString *rowValue  =  [rowDict objectForKey:@"name"]; 
10  
11     NSString *message = [[NSString alloc] initWithFormat:@”您选择了%@队。”, rowValue]; 
12  
13     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@”请选择球队” message:message delegate:self cancelButtonTitle:@”Ok” otherButtonTitles:nil]; 
14  
15     [alert release];                                                                                                                                           
16  
17     [message release]; 
18  
19     [alert show];                                                                                                                                              
20  
21     [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
22  
23 }
View Code

相关文章: