UITableView的泄露?(UITableView leaking?)

2019-10-28 13:15发布

我有一个UITableViewController,我设置的一些属性viewDidLoadMethod像这样:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self.parentViewController.parentViewController action:@selector(dismissSettings)] autorelease];
    [self setTitle:@"Gabbai Settings"];

    //Set up the table 
    [self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped];

    [self.tableView setRowHeight:65.0];
    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLineEtched];

    [self.tableView.backgroundView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@_settings", kTheme] ofType:@"png"]]]];


}

这个应用程序显示了UIScrollViewController和一个UIButton。 当按下该按钮时,该应用显示一个模式的UINavigationController和UINavigationController的包含一个UITableViewController。

出于某种原因,泄漏报告时,我展示的UITableViewController一些泄漏。 但是,如果我注释掉四大行后//Set up the table ,一切都很好。

当四线注释掉,泄漏仪器显示以下内容:

我不知道是什么在这里发生,但它真的很烦人。 我使用的代码相同的四条线前定制我的UITableViewController,这是一个新的行为。

可能是什么问题?

Answer 1:

正如已指出的其他的答案,你的问题是线路:

[self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped];

这将创建一个新UITableView对象,也不会修改self.tableView ,这意味着该行是完全没有意义的。 它只会造成你所遇到的泄漏。 删除它,你应该罚款。



Answer 2:

在你的dealloc方法显式释放的tableView看看会发生什么。

或者更好的是,清洁所有 - >建立与分析,告诉我们你所看到的



Answer 3:

如果self.tableview已经存在,你不想再对其进行初始化。 无论是初始化一次(我猜你已经做了,也许是从笔尖加载),然后如果需要的话,在这里重的框架。

或者只分配/初始化这里的tableview。



Answer 4:

也许你可以尝试定义的UIBarButtonItem作为一个变量,然后将其分配到左侧导航栏按钮项目,然后松开按钮

你有没有尝试建立与生成菜单下的分析? 2.0目标C句子的相当准确

另外,你必须要小心属性定义,您使用的self.tableView,我想你,你有什么样@属性(非原子,保留)?在这种情况下,一旦你ALLOC,你应该释放的财产下一行..

最后,这条线是非常怪异:[self.tableView initWithFrame:方法self.tableView.frame风格:UITableViewStyleGrouped]。 您尝试初始化已经初始化表多数民众赞成,因为如果你不这样做,self.tableView.frame应该是错误的。 除此之外,该initWithFrame方法返回一个没有被分配的东西..我认为你能想到更好的办法来做到这一点

很抱歉的混乱,我一直在回答这个问题在聊天,但不幸的是你被断开。

希望这可以帮助。



Answer 5:

看起来你有一个数组或字典这就是泄漏,而不是实现代码如下。

您正在使用来填补你的tableview数组是什么?

此外,你不会想[self.tableVIew initWithFrame ,尝试[self.tableView setFrameCGRectMake(x,y,w,h)];



文章来源: UITableView leaking?