SAPostTableViewController

SAPostTableViewController

我有一个表视图,当选择一个单元格时,它将视图控制器推到导航堆栈上:

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时,它不会调用SAPostTableViewControllerviewDidUnload。因此,这意味着,如果我重新选择推导出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];

    }

10-01 15:57