无法释放功能中的视图控制器



为什么我不能在函数结束时使用[y release] ?

- (void)functionused:(NSTimer *)timer
{   
    [password resignFirstResponder]; 
    mainViewController* y=[[mainViewController alloc]initWithNibName:@"mainViewController" bundle:nil];
    UIView *currentView = (UIView *)[timer userInfo];
    for ( UIView *subview in [self.view.superview subviews] ) {
        if ((subview.tag != 14)) {
            [subview removeFromSuperview];
        }
    }
    [currentView.superview addSubview:[y view]];
    //[y release];
}

因为这将使mainViewController的引用计数为零,它将被释放。你需要在某个地方保存对它的引用。

[currentView.superview addSubview:[y view]];只将它的视图添加到父视图。视图将被保留,但控制器本身不会。

在这种情况下,你需要理解UIView和UIViewController之间的区别。UIViewController包含一个指向UIView实例的指针,但是UIView不包含对UIViewController的直接引用。当你把视图控制器的视图添加到currentView的父视图时,它是retain count increments。然而,这不会增加视图控制器的保留计数。如果被释放,它会变为0这会导致视图控制器被释放

最新更新