2010-11-30 80 views
0

我有一个UITableViewController,我在viewDidLoadMethod设置一些属性,像这样:UITableView泄漏?

- (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之后注释掉这四行,一切都很好。

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

Screenshot of Leaks Instrument

我不知道这到底是怎么回事,但它真的很烦人。我之前使用过相同的四行代码来自定义我的UITableViewController,这是一种新行为。

什么可能是错的?

回答

1

如已通过其他的答案中指出,你的问题是该行:

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

这将创建一个新UITableView对象,它将修改self.tableView这意味着该行是完全没有意义的。它只会造成你正在经历的泄漏。删除它,你应该没问题。

0

看起来你有一个数组或字典泄漏,而不是tableview。

你用来填充你的tableview的数组是什么?

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

+0

我不使用数组,我设置手动里面`cellForRowAtIndex`方法的一切。 – Moshe 2010-11-30 19:08:18

+0

那么,什么泄漏是一个数组/字典的地方,根据你的泄漏图像。 – WrightsCS 2010-11-30 19:57:43

+0

当我重新初始化UITableView时,它泄漏了旧的内容,因此NSArray泄漏。 – Moshe 2010-12-01 20:43:15

1

如果self.tableview已经存在,你不想再对其进行初始化。或者初始化一次(我猜你已经做过了,也许是通过从一个笔尖加载),然后如果需要,可以在这里重新设置框架。

或者只是在这里alloc/init tableview。

+0

我们有赢家! + 1 – Moshe 2010-12-01 20:42:45

1

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

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

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

最后,这一行非常奇怪:[self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped];你正试图初始化已经初始化的表,因为如果你不这样做,self.tableView.frame应该是错误的。除此之外,initWithFrame方法返回的东西没有被分配..我认为你可以想到一个更好的方法来做到这一点

对不起,我一直在聊天回答这个问题,但不幸的是你断开连接。

希望这会有所帮助。

2

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

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