2010-02-06 59 views
2

這篇文章緩存問題密切相關,我以前的帖子:TDBadgedCell keeps caching the BadgeNumber與TDBadgedCell

的「徽章」從TDBadgedCell保持高速緩存的數量。一個非常簡單的例子如下:

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

    TDBadgedCell *cell = (TDBadgedCell *)[_tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
     [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; 
    } 

    [cell setBadgeColor:[UIColor blackColor]]; 
    [cell setBadgeNumber:[indexPath row]]; 

    [[cell textLabel] setText:[NSString stringWithFormat:%@"%d", [indexPath row]]]; 

    return cell; 
} 

任何人都有任何線索爲什麼會發生這種情況? textLabel和detailTextLabel不會緩存數據。任何額外的信息也會受到歡迎,因爲我似乎在UITableViewCells中緩存圖形有很多問題。任何最佳實踐或其他有用的信息將是最受歡迎的。

回答

1

好吧,我想出了這一個。顯然,我不應該使用默認代碼來初始化使用TDBadgedCell時的單元格。下面的代碼:

TDBadgedCell *cell = (TDBadgedCell *)[_tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 
    cell = [[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; 
} 

需要更換成這樣:

TDBadgedCell *cell = [[[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 

我想知道,如果這是在內存使用和這樣的條款乾淨,但它會做至少現在。

0

我認爲這是在2013年3月22日提交的承諾2d255f075fe53ad10afe8eb65666207a8f2c65d0中修復的。在我的情況下,最初似乎在大部分時間都解決了這個問題,但偶爾也會看到緩存徽章。然後我意識到你可以通過使用兩個不同的單元來一勞永逸地解決這個問題:當你需要一個合格的單元格時,將一個TDBadgedCell出列,並且當你不需要一個徽章時,將一個普通的UITableViewCell出列。