为什么我不能在函数结束时使用[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这会导致视图控制器被释放