2012-11-20 58 views
1

非常基本的cellForRowAtIndexPath實現。UITableViewCell內存管理

我想知道爲什麼分析儀告訴我,我在這裏泄漏內存。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    MyObject *object = [[self.datasource objectForKey:key] objectAtIndex:indexPath.row]; 

    cell.textLabel.text = object.title; 

    return cell; 
} 

分析儀告訴我'cell'可能泄漏。這只是分析儀的一個弱點,或者我應該如何處理?

注意:添加一個電話自動釋放,像這樣:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier] autorelease]; 

導致系統崩潰。有什麼想法嗎?

+0

是否使用ARC?你的'if(cell == nil)裏面的 – 2012-11-20 17:38:10

+0

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; }'你的alloc/init沒有autorealease看看是否有幫助 –

回答

1

如果你不使用ARC,那麼你應該自動釋放的細胞:

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 

注意,這是不等同dequeueReusableCellWithIdentifier:取回後自動釋放它,因爲該方法被多次調用對於特定的單元格,並且過度自動釋放會導致崩潰。

0

你應該把自動釋放你在哪裏的Alloc新的細胞線:

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];