为什么我不能在功能结束时使用[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];
}
答案 0 :(得分:4)
因为这会使mainViewController的引用计数为零,并且它将被释放。你需要在某处保持对它的引用。
第[currentView.superview addSubview:[y view]];
行只会将其视图添加到超级视图中。视图将被保留,但控制器本身不会。
答案 1 :(得分:2)
在这种情况下,您需要了解UIView和UIViewController之间的区别。 UIViewController包含一个指向UIView实例的指针,但UIView不包含对UIViewController的直接引用。因此 - 当您将视图控制器的视图添加到currentView的超级视图时,它会保留计数增量。但是,这不会增加视图控制器的保留计数。如果被释放它将变为0,这将导致视图控制器被释放。