我有一个表视图,当选择一个单元格时,它将视图控制器推到导航堆栈上:
SAPostTableViewController *postViewController = [[SAPostTableViewController alloc] initWithNibName:NSStringFromClass([SAPostTableViewController class]) bundle:nil];
postViewController.site = site;
[self.navigationController pushViewController:postViewController animated:YES];
[postViewController release];
SAPoSTabLeVIEW控制器有一个静态的TabLVIEW,它的单元格是从笔尖加载的。
我重写了
initWithNibName:bundle:
方法:-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
self.sections = [NSMutableDictionary dictionary];
}
return self;
}
sections
是保留属性。在
viewDidLoad
中我有这个:- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cellVisibiltyChanged:) name:@"SAStaticCellVisibiltyChanged" object:nil];
}
所以要在
SAPostTableViewController
中匹配:- (void)viewDidUnload
{
[super viewDidUnload];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"SAStaticCellVisibiltyChanged" object:nil];
}
但是,当我按下导航栏中的后退按钮(所有标准行为,无覆盖)并弹出
viewDidUnload
时,它不会调用SAPostTableViewController
或viewDidUnload
。因此,这意味着,如果我重新选择推导出dealloc
的单元格,它将创建一个新的SAPostTableViewController
的实例,并且重复这个返回和前进只是意味着内存使用量随着弹出的SAPostTableViewController
s永远不会被释放而不断增加。(我通过运行分配工具了解这一点)奇怪的是,如果我释放SAPoSTabLeVIEW控制器两次,那么它会像我预期的那样工作:
SAPostTableViewController *postViewController = [[SAPostTableViewController alloc] initWithNibName:NSStringFromClass([SAPostTableViewController class]) bundle:nil];
postViewController.site = site;
[self.navigationController pushViewController:postViewController animated:YES];
[postViewController release];
[postViewController release];
(如果我添加了一个第三版本的声明,它崩溃了,正如我预期的那样,只有2)
我已经使用
SAPostTableViewController
并逐步遍历在上面代码的第一行中执行的代码行,retaincount保持在1。它在第一和第二行之间跳跃,所以我看不到它会留出额外的时间。SoopToTabVIEW控制器仅用于此位置,它不是任何对象的委托,也不具有委托。
我怎样才能找到解决办法,还是我错过了一些简单的事情?
以下是在推动SoPotoTabVIEW控制器一次后显示的仪器(只有一个发布语句):
以及它在反复导航之后显示的内容(同样,一个发布声明):
最佳答案
当你点击一个单元格时,你正在创建一个新的对象,为什么你不在init方法中创建你的对象(SAPostTableViewController
),然后在你的单元格中按下相同的对象监视时间。
你可以这样做:
postViewController = [[SAPostTableViewController alloc] initWithNibName:NSStringFromClass([SAPostTableViewController class]) bundle:nil];
在
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
postViewController.site = site;
[self.navigationController pushViewController:postViewController animated:YES]; [postViewController release];
}