请看下面我的代码。这部分从堆栈中弹出顶视图控制器(通常相同ArticleControllerController
)(我发现无论是弹出单个控制器还是弹出到根控制器,问题都保持不变),创建新控制器并添加到堆栈中。
问题是,它的保留计数永远不会变为零,因此永远不会调用dealloc
of 方法,从而ArticleControllerController
使大量的各种接口对象未释放。由于内存不足,最终应用程序崩溃(至少在设备中,至少我认为这部分是主要问题)。
- (void) navigateToNewsCategoryByIndex:(int)idx {
[app.nav popViewControllerAnimated:NO]; // could be popToRootController
ArticleControllerController *ac = [[ArticleControllerController alloc] init];
ac.categoryIndex = idx;
[app.nav pushViewController:ac animated:NO];
[ac release];
NSLog(@"AC retain count: %d", [ac retainCount]); // prints 2
}
所以,我猜,popViewControllerAnimated 只发布了其余两个保留中的一个。为什么?我应该寻找什么?我能做些什么?打电话[ac release]
两次(那将是可怕的事情)?