内存泄漏是当一个对象或变量在使用完成后没有释放掉,那么如果我们走了另外一个极端情况会什么样呢?这就导致过度释放(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 }