为什么作者没有在以下代码段中对childController进行发布?

时间:2011-04-30 22:34:49

标签: iphone objective-c ios memory-management

我正在做一个教程,作者给出了一个例子,但我很好奇为什么他没有在函数结束时释放childController。有什么想法吗?

 -(void)tableView:(UITableView *) tableView
    accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{

    if (childController==nil) {
        childController = [[DisclosureDetailController alloc] initWithNibName:@"DisclosureDetailController" bundle:nil];
    }   
        childController.title=@"Disclosure Button Pressed"; //why this line?????
        NSUInteger row = [indexPath row];
        NSString *selectedMovie = [list objectAtIndex:row];
        NSString *detailMessage = [[NSString alloc]initWithFormat:@"you pressed disclosure button for %@",selectedMovie];

        childController.message = detailMessage;
        childController.title = selectedMovie;
        [detailMessage release];
        [self.navigationController pushViewController:childController animated:YES];

    }

2 个答案:

答案 0 :(得分:5)

似乎childController是这个类中的一个字段,因此(希望)在dealloc部分中释放它。

他/她实际上只创建了一次。

修改

在对childController进行真正的nil检查后,它获得保留计数为1并被分配给该字段。如果未提前释放childController,则在整个类的实例的生命周期内只执行一次。

答案 1 :(得分:1)

他将childController作为一个ivar,因此可能会在课程的dealloc方法中发布。