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

jin*_*ini 0 iphone memory-management objective-c ios

我正在做一个教程,作者给出了一个例子,但我很好奇为什么他没有在函数结束时释放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];

    }
Run Code Online (Sandbox Code Playgroud)

Nic*_*ver 5

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

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

编辑:

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

  • @jini:不.据推测,`childController`第一次只会是`nil`,然后使用`alloc/init`在第二行创建它.从那时起,当调用该方法时,`if(childController == nil)`将返回NO,并且将跳过创建实例的以下行. (2认同)