2010-11-30 66 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,看看會發生什麼。

或者更好的是,清潔所有 - >建立與分析,告訴我們你所看到的