【发布时间】:2010-12-20 08:04:04
【问题描述】:
我有一个基于导航的视图控制器,在视图控制器中我隐藏了顶部导航栏并使用自定义 UIView 作为导航栏。
UIView 栏有一个返回按钮,当返回按钮被预置时,我使用 Delegate 方法(我已经声明了一个协议)与视图控制器进行通信。
我在自定义导航栏中使用委托 id 委托人;
在主视图控制器中,当我分配导航栏时,我设置了委托
topBar = [[TopNavigationBar alloc] initWithFrame:CGRectMake(0, 0, 480, 40)];
topBar.lblTitle.text = @"Shop";
topBar.delegate = self;
我在 ViewControllers dealloc 中释放了这个 Bar。
现在当我按下后退按钮时,我使用委托方法在主 ViewController 中调用 popViewController。
//in Custom Bar
-(void)ButtonPressed {
[delegate TopNavigationBarBackButtonPressed];
}
//In View COntroller
-(void)TopNavigationBarBackButtonPressed {
[self.navigationController popViewControllerAnimated:YES];
}
现在 ViewController 被弹出并且控制转到前一个 viewController 但在 ViewController 和 UIView 中都没有触发 dealloc
我做错了什么?
【问题讨论】:
-
任何想法的人?如果retainCount 不为0,则不会调用dealloc。但我没有在任何地方保留viewController。在我将它推入堆栈后,我做了一个 [vewController release]。所以我能想到的唯一原因是我编写的自定义协议。我必须释放它吗?我确实保留了财产中的代表。但即使我确实在 dealloc 中释放它,它也不会被调用。难倒!!!
标签: uiview delegates ios4 uiviewcontroller dealloc